List
List接口特点:
1、有序集合
2、有索引(操作索引时需要注意的是IndexOutOfBoundsException,索引越界异常)
3、允许重复元素
List带索引的方法:
add(指定位置添加)、get(获取指定位置元素)、remove(指定位置移除)、set(指定位置替换)
List<String> list = new ArrayList<>();
list.add("5");
list.add("2");
list.add("1");
list.add(0,"jws");//指定索引添加
list.remove(1);//移除元素
list.set(2,"love");//替换元素
list集合3种遍历方式
//普通for循环
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
//迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
}
//增强for循环
for (String s : list) {
System.out.println(s);
}
ArrayList(底层数组,查询快,增删慢,多线程)
许多人什么情景下都会大量使用Arraylist,其实是不对的,需要确定该需求是否是查询比较多的需求。
LinkedList(底层链表,查询慢,增删快,多线程)
注意:使用LinkedList特有方法,不能使用多态创建对象了
因为是链表结构,对于首尾位置的元素很方便。它有大量操作首尾元素的方法。
addFirst / addLast。
getFirst / getLast。
removeFirst / removeLast。
pop方法 等效于 removeFirst : 移除第的一个元素
push方法 等效于 addFirst:开头添加
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("jws");
linkedList.addFirst("521");//集合开头添加
linkedList.push("521");//集合开头添加
linkedList.addLast("last");//尾部添加
String first = linkedList.getFirst();//获取第一个元素
String last = linkedList.getLast();//获取最后一个元素
linkedList.clear();//清空集合中元素
如果获取元素的时候集合中没有元素,会报.NoSuchElementException(没有元素异常) 所以使用的时候需要加上判断集合是否为空。
if (!linkedList.isEmpty()) {
String first = linkedList.getFirst();//获取第一个元素
String last = linkedList.getLast();//获取最后一个元素
}
String first = linkedList.removeFirst();//移除第一个元素,返回移除元素
String popFirst = linkedList.pop();//移除第一个元素,返回移除元素
String last = linkedList.removeLast();//移除最后一个元素,返回移除元素
Vector(底层数组,单线程)
1.0版本最早期集合,几乎不用了。