集合的遍历
集合提供了统一的遍历方式:迭代器模式
Iterator iterator()
该方法可以获取用于遍历当前集合的迭代器实现类
java.util.Iterator 迭代器接口
不同的集合都提供了一个迭代器实现类用于遍历当前集合元素,迭代器接口上规定了遍历集合的
相关方法,使用迭代器遍历集合的步骤遵循:问->取->删的步骤进行,其中删除不是必要操作。
Collection c = new ArrayList();
c.add("one");
c.add("#");
c.add("two");
c.add("#");
c.add("three");
c.add("#");
c.add("four");
c.add("#");
c.add("five");
System.out.println(c);//[one, #, two, #, three, #, four, #, five]
Iterator it = c.iterator();
/*
boolean hasNext()
使用迭代器询问是否还有下一个元素可以迭代。迭代器默认开始的位置是集合第一个
元素之前,因此第一次调用就是询问是否有第一个,依此类推。
E next()
使迭代器向后移动并获取下一个元素。
*/
while(it.hasNext()){
String e = (String)it.next();
if("#".equals(e)){
/*
使用迭代器遍历集合元素的过程中不要通过集合的add,
remove这样的操作增删元素,否则迭代器会抛出异常:
java.util.ConcurrentModificationException
*/
/*
迭代器提供了一个remove方法,删除迭代器当前位置的集合元素
*/
it.remove();
}
}
System.out.println(c);//[one, two, three, four, five]
List集合
List接口继承自Collection,是可以存放重复元素且有序的集合。
常用实现类:
java.util.ArrayList:内部使用数组实现,查询性能更好。
java.util.LinkedList:内部使用链表实现,增删性能更好,收尾增删性能最佳。
对性能无要求时通常用ArrayList
List<String> list = new LinkedList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
System.out.println(list);//[one, two, three, four, five]
/*
E get(int index)
获取指定下标出对应的元素
*/
String str = list.get(2);//获取集合中第三个元素
System.out.println(str);//three
/*
E set(int index,E e)
将给定元素设置到指定位置上,返回值为该位置被替换的元素。
*/
System.out.println(list);//[one,two,three,four,five]
String old = list.set(1,"six");//返回值为被替换的"two"
System.out.println(list);//[one,six,three,four,five]
System.out.println(old);//two
//将集合反转
Collections.reverse(list);
System.out.println(list);//[five,four,three,six,one]
List集合重载了一对add和remove方法
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
System.out.println(list);//[one,two,six,three,four,five]
/*
void add(int index,E e)
将给定元素插入到指定位置
*/
list.add(2,"six");
System.out.println(list);//[one, two, six, three, four, five]
/*
E remove(int index)
删除并返回指定位置上的元素
*/
String e = list.remove(4);
System.out.println(list);//[one, two, six, three, five]
System.out.println("被删除的元素是:"+e);//被删除的元素是:four
List subList(int start , int end)获取指定范围的子集
List<Integer> 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<Integer> subList = list.subList(3,8);
System.out.println(subList);//[3, 4, 5, 6, 7] 含头不含尾
//将子集每个元素扩大十倍
for(int i=0;i<subList.size();i++){
int e = subList.get(i);
e = e * 10;
subList.set(i,e);
}
System.out.println(subList);//[30,40,50,60,70]
/*
对子集的操作就是对原集合对应的操作
*/
System.out.println(list);//[0, 1, 2, 30, 40, 50, 60, 70, 8, 9]
//删除集合中的2-8这些元素
list.subList(2,9).clear();
System.out.println(list);//[0, 1, 9]