List是Collection常用的子接口,是一个可重复集合并且有序,其单独提供了一套可以通过下标操作元素的方法。
add()方法用于向list集合中添加元素
List list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
System.out.println(list);//[one, two, three, four, five]
get(int index);用于获取下标为index的元素
String str = list.get(3);
System.out.println(str);//four
set(int index,E e);用于更改下标为index为新的e,这个方法返回的是原来下标为index的元素值
String old = list.set(0, "1");
System.out.println(list);//[1, two, three, four, five]
System.out.println(old);//one
add(int index,E e);在第index个位置添加新的值e,原来这个位置及其后面的元素都向后移一位。
//list集合为:[one, two, three, four, five]
list.add(1,"2");
System.out.println(list);
//[one, 2,two, three, four, five]
remove(int index);删除第index数,返回的是被删除的那个数。每次只能删除一个数
String str = list.remove(1);
System.out.println(list);//[one, two, three, four, five]
System.out.println(str);//2
集合的toArray()方法,可以将集合转成字符串,以前的版本中返回的是一个Object[ ]类型数组,这样的话原本集合的泛型就得不到传承。
现在可以返回一个和集合泛型一样的数组。但是要传入一个参数
toArray(new Object[int length])
//传入的数组长度可以小于等于原来集合的长度,也可以大于集合的长度。
Collection c = new ArrayList<>();
c.add("one");
c.add("two");
c.add("three");
c.add("four");
//Object[] o = c.toArray();//用Objcet接收,这样泛型就没有得到传承
String[] str = c.toArray(new String[10]);
//new的新字符串的长度可以是原数组长度,可以更长,更短的时候默认是数组原长
System.out.println(str.length);//10
System.out.println(Arrays.toString(str));
借助数组工具类Arrays,有一个asList()方法
String[] array = {"one","two","three","four"};
List list = Arrays.asList(array);
System.out.println(list.size());//4
System.out.println(list);
但是转成的集合list不能做增删操作,主要是因为是由数组转过来的,数组是定长的。
list.add("five");
list.remove(2);
/*
* 数组不支持这个操作,会报UnsupportedOperationException异常
* 因为数组是定长的 ,不支持随意增删元素,但是修改元素值可以
*/
此时修改集合或数组中元素的值,原数组或集合的值也会被改变。
list.set(1, "2");
System.out.println(list);//[one, 2, three, four]
System.out.println(Arrays.toString(array));
//[one, 2, three, four]
array[0]="1";
System.out.println(Arrays.toString(array));//[1, 2, three, four]
System.out.println(list);//[1, 2, three, four]
subList(int a,int b);获取下标a-b的子集,返回值也是集合,包含a不包含b
List list = new ArrayList<>();
for(int i=0;i<10;i++){
list.add(i);
}
System.out.println(list);//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
List subList = list.subList(3, 8);//[3, 4, 5, 6, 7]
现在对这个子集合操作,也会改变原集合中的值
System.out.println(subList);
for(int i=0;i
// 删除list集合中的2-8
list.subList(2, 9).clear();
System.out.println(list);//[0,1,9]
集合的工具类:java.util.Collections
List list = new ArrayList<>();
Random ran = new Random();
//给数组赋1-100的随机数
for(int i=0;i<10;i++){
Integer index = ran.nextInt(100);
list.add(index);
}
System.out.println(list);
//从小到大
Collections.sort(list);
System.out.println(list);
//乱序
Collections.shuffle(list);
System.out.println(list);
一般可以排序的集合泛型都实现了Comparator接口,对于没有实现Comparator接口的自定义类,我们可以重写排序规则进行排序,例如:
//Point类是自定义的一个类,表现形式为数轴上的两个点
List list = new ArrayList<>();
list.add(new Point(1,2));
list.add(new Point(3,4));
list.add(new Point(5,6));
list.add(new Point(1,6));
list.add(new Point(3,2));
Collections.sort(list,new Comparator(){
public int compare(Point o1, Point o2) {
//排序规则为,点到原点的距离,从小到大排
int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
return len1-len2;
}
});