一、Java List的相关总结
1、List中可以添加任何对象,包括自己定义的新的类。
class Person{
.....
}上面定义了一个Person类,下面看好如何使用List
Person p1=new Person(); Person p2=new Person(); List list=new ArrayList(); list.add(p1); list.add(p2);//这里是将对象加入到list中 for(int i=0;i Person p=(Person)list.get(i);//注意,这里一定要强制类型转换,因为List中取出的对象都是Object类型的。 }
2、List是一个接口,不能实例化,需要实例化一个ArrayList或者LinkedList
List myList = new ArrayList();
3、使用myList.add(任何对象);就可以进行添加了。
4、取值的时候myList.get(索引);取出来的值都是Object,使用时需要类型转换。
5、可用Iterator迭代器对List中的元素进行迭代操作。
List 集合中的对象按照一定的顺序排放,里面的内容可以重复。
List接口实现的类:ArrayList(实现动态数组), Vector(实现动态数组) ,LinkedList(实现链表), Stack(实现堆栈)
二、list接口
1.java.util.ArrayList类实现一个可增长的动态数组,平时用的比较多的就是add()方法,其它方法请参考API帮助文档。使用该方法向集合内添加对象,并且这些对象是按照一定的顺序排列的,它内部原理是数组实现的,因此处理数据量较大时,不建议使用。
public class TestArrayList {
public static void main(String[] args) {
//声明List 并实例化为ArrayList
List al = new ArrayList();
//使用add()方法添加元素
al.add("a");
al.add("b");
al.add("c");
al.add("d");
//使用Iterator迭代器遍历出集合的元素并打印
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}
}2.java.util.Vector(向量)类 与ArrayList类似的也是实现一个动态的数组,该向量可以随意的增长以存放更多的对象
public class TestArrayList {
public static void main(String[] args) {
//声明List 并实例化为Vector
List al = new Vector();
//使用add()方法添加对象
al.add("a");
al.add("b");
al.add("c");
al.add("d");
//使用Iterator迭代器遍历出集合的对象并打印
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}
}3.java.util.LinkedList类实现了链表,可初始化化为空或者已存在的集合,通常使用以下方法
add();向链表末尾添加对象。
addFirst()在链表开头添加对象。
addLast()在链表末尾添加对象。
getFirst()得到链表开头的对象。
getLast()得到链表末尾的对象。
注意该类提供了随机访问列表中的元素的方法,但是底层依然必须遍历去查找随机访问的对象,因此性能依然有限.
public static void main(String[] args) {
//声明LinkedList并实例化Linked
List al = new LinkedList();
//使用add()方法添加元素
al.add("a");
al.add("b");
al.add("c");
al.add("d");
//使用Iterator迭代器遍历出集合的元素并打印
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
System.out.println("_____");
//向链表头和尾分别添加x和z
al.addFirst("z");
al.addLast("x");
//遍历查看添加后的结果
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}4.java.util.Stack类实现了堆栈数据结构,即按照先进后出的原则存放数据。创建时只能为空。使用push()方法进行添加对象.
public static void main(String[] args) {
//声明Stack并实例化
Stack al = new Stack();
//使用push()方法添加元素
al.push("a");
al.push("b");
al.push("c");
al.push("d");
al.push("f");
//使用Iterator迭代器遍历出集合的元素并打印
for(Iterator i = al.iterator();i.hasNext(); ){
String str = (String) i.next();
System.out.println(str);
}
}-----------
Example added by myself:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList list = new ArrayList();
list.add(0,"aa");
list.add(1,"bb");
list.add(2,"cc");
for(int i=0;i<10;i++) {
list.add(Integer.toString(i));
}
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
for(Iterator i=list.iterator();i.hasNext();)
//首先定义一个list对象的Iterator,然后利用该Iterator进行循环迭代操作
{
String s =(String)i.next();
System.out.println(s);
}
}
}三、ArrayList
public static void main(String[] args) {
// ArrayList类实现一个可增长的动态数组
List<String> list = new ArrayList<String>();
// 插入元素
list.add("list1");
list.add("list2");
// 打印list的大小
System.out.println(list.size());
// 按索引移除元素
list.remove(0);
// 按对象移除元素
list.remove("list2");
// 打印list的大小
System.out.println(list.size());
// 清空list
list.clear();
}四、LinkedList
public static void main(String[] args) {
// LinkedList类实现了链表,可初始化化为空或者已存在的集合
LinkedList<String> list = new LinkedList<String>();
// 插入元素
list.add("list2");
list.add("list3");
// 向链表头插入数据
list.addFirst("list1");
// 向链表尾插入数据
list.addLast("list4");
for (String str : list) {
System.out.println(str);
}
// 获取链表头数据
System.out.println("链表头数据:" + list.getFirst());
// 获取链表尾数据
System.out.println("链表尾数据:" + list.getLast());
}五、Java List 排序 - 数字排序
public static void main(String[] args) {
// 创建list
List<Integer> list = new ArrayList<Integer>();
// 插入元素
list.add(2);
list.add(0);
list.add(3);
list.add(4);
list.add(1);
Collections.sort(list);
for (int i : list) {
System.out.println(i);
}
}六、Java List 排序 - 中文排序
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("一鸣惊人-Y");
list.add("人山人海-R");
list.add("海阔天空-H");
list.add("空前绝后-K");
list.add("后来居上-H");
Comparator<Object> cmp = Collator.getInstance(java.util.Locale.CHINA);
Collections.sort(list, cmp);
for (String str : list) {
System.out.println(str);
}
}七、Java List 排序 - 实体类排序
package net.xsoftlab.dict;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class TextList {
public static void main(String[] args) {
List<User> userlist = new ArrayList<User>();
userlist.add(new User("Y - 易小星 ", 33));
userlist.add(new User("W - 王大锤", 33));
Comparator<User> cmp = new ComparatorUser();
Collections.sort(userlist, cmp);
for (User user : userlist) {
System.out.println(user.getName());
}
}
}
class ComparatorUser implements Comparator<User> {
@Override
public int compare(User u1, User u2) {
// 先按年龄排序
int flag = u1.getAge().compareTo(u2.getAge());
// 年龄相等比较姓名
if (flag == 0) {
return u1.getName().compareTo(u2.getName());
} else {
return flag;
}
}
}
class User {
private String name;
private Integer age;
public User() {
super();
}
public User(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}八、Java List 遍历
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
// 插入元素
list.add("list1");
list.add("list2");
list.add("list3");
System.out.println("第一种遍历方法 - >");
for (String str : list) {
System.out.println(str);
}
System.out.println("第二种遍历方法 - >");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("第三种遍历方法 - >");
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}九、Java List 遍历时移除元素
package net.xsoftlab.dict;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class RemoveItemFromList {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
// 插入元素
list.add("list1");
list.add("list2");
list.add("list2");
list.add("list3");
// 实例化新的list防止因传递地址而达不到测试效果。
remove1(new ArrayList<String>(list));
remove2(new ArrayList<String>(list));
remove2_1(new ArrayList<String>(list));
remove3(new ArrayList<String>(list));
}
public static void remove1(List<String> list) {
System.out.print("第一种方法 - > ");
try {
for (String str : list) {
if (str.equals("list2"))
list.remove(str);
}
} catch (Exception e) {
System.out.println("移除失败!");
}
}
public static void remove2(List<String> list) {
System.out.print("第二种方法 - > ");
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
if (str.equals("list2"))
list.remove(str);
}
System.out.println(list);
System.out.println("也有异常,可以用下面的方法避免。");
}
public static void remove2_1(List<String> list) {
System.out.print("第二种方法修正 - > ");
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
if (str.equals("list2")) {
list.remove(str);
// 因移除了元素,位置发生偏移,需要重新对当前位置的元素进行判断。
i--;
}
}
System.out.println(list);
}
public static void remove3(List<String> list) {
System.out.print("第三种方法 - > ");
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String str = iter.next();
if (str.equals("list2"))
iter.remove();
}
System.out.println(list);
}
}- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
