1.list集合特点
数组大小固定,集合大小可变
数组可以存放基本数据类型,集合只能存放对象
1.1 有索引,0开始
1.2 集合元素可以重复
1.3 元素存入的顺序和实际存储的顺序是相等的
2. 常用方法
3. 集合遍历
遍历方式有转换为数组遍历,使用迭代器遍历,使用foreach遍历(语法糖,实际为迭代器),下面为迭代器遍历。
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("jia");
list.add("ru");
list.add("jian");
//使用迭代器遍历集合
Iterator<String> it = list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
}
3.1 遍历过程中出现并发修改异常(ConcurrentModificationException)
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("jia");
list.add("ru");
list.add("jian");
list.add("jian");
list.add("jian");
//使用迭代器遍历集合
Iterator<String> it = list.iterator();
while (it.hasNext()){
String s = it.next();
if (s.equals("ru"))
list.remove(s); //错误处,如果元素为三个,可正常结束,输出两个元素jia,ru
System.out.println(s);
}
}
3.2 遍历过程报错解决(可用for循环)
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
ArrayList<String> removeList = new ArrayList<>();
list.add("jia");
list.add("ru");
list.add("jian");
list.add("jian");
//使用迭代器遍历集合
Iterator<String> it = list.iterator();
while (it.hasNext()){
String s = it.next();
if (s.equals("ru"))
removeList.add(s);
}
list.removeAll(removeList);
System.out.println(list);
}
foreach在进行循环时也是使用迭代器(不包括数组)
4.类型转换(集合转数组)
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
ArrayList<String> removeList = new ArrayList<>();
list.add("jia");
list.add("ru");
list.add("jian");
list.add("jian");
Object[] objects = list.toArray();
for (Object str : objects) {
System.out.println(str);
}
//推荐,避免之后强制转换类型
String[] strings = list.toArray(new String[0]);
for (String string : strings) {
System.out.println(string);
}
}
5. ArrayList和LinkedList的区别
都是实现了List的接口,不同的是存储数据的数据结构不同,Array List使用数组来存储数据,LinkedList使用链表,所以各自的特点也和合资的数据结构特点一样。
ArrayList:查找快,增删满
LinkedList:增删快,查找慢