JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)
集合的数据结构
栈
特点:先进后出
队列
特点:先进先出
数组
特点:查询快,增删慢
链表
特点:查询慢,增删快
红黑树
特点:查询速度非常快
List集合
List接口
java.util.List接口 extends Collection接口
List接口的特点:
- 有序集合。 存储元素和取出元素的顺序时一致的,存储:123,取出:123。
- 有索引,包含了一些带索引的特有方法。
- 允许存储重复元素
带索引的方法:
void add(int index, E element)
将指定元素插入此列表中的指定位置(可选操作)。E get(int index)
返回此列表中指定位置的元素。E remove(int index)
删除此列表中指定位置的元素(可选操作)。E set(int index, E element)
用指定的元素替换此列表中指定位置的元素(可选操作)。
public class Demo01 {
public static void main(String[] args) {
//创建一个List集合对象
List<String> list = new ArrayList<>();
//往集合中添加元素
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("a");
System.out.println(list);//[a, b, c, d, a]
//void add(int index, E element) 将指定元素插入此列表中的指定位置(可选操作)。
//在c和d之间添加w
list.add(3,"w");
System.out.println(list);//[a, b, c, w, d, a]
//E get(int index) 返回此列表中指定位置的元素。
System.out.println(list.get(0));//a
System.out.println(list.get(4));//d
//E remove(int index) 删除此列表中指定位置的元素(可选操作)。
//把d后边的a删除
String s1 = list.remove(5);
System.out.println("被移除的元素:"+s1);//被移除的元素:a
System.out.println(list);//[a, b, c, w, d]
//E set(int index, E element) 用指定的元素替换此列表中指定位置的元素(可选操作)。
//把w替换为小猫
String s2 = list.set(3, "小猫");
System.out.println("被替换的元素:"+s2);//被替换的元素:w
System.out.println(list);//[a, b, c, 小猫, d]
}
}
注意:使用带索引的方法,一定不要超出索引的使用范围,否则就会抛出索引越界异常。
IndexOutOfBoundsException
索引越界异常,一般集合会抛出ArrayIndexOutOfBoundsException
数组索引越界异常StringIndexOutOfBoundsException
字符串索引越界异常
三种遍历的方法:
- 普通for循环遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
- 迭代器遍历
Iterator<String> it = list.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
- 增强for循环遍历
for (String s : list) {
System.out.println(s);
}
ArrayList集合
List接口的可调整大小的阵列实现。
请注意,此实现不同步。(多线程)
特点:
- 实现了List接口,数组大小可根据元素的增加或删除调整大小。
- 底层实现为数组,查询快,增删慢**
- 此实现不同步(多线程)
Vector集合
特点:
- 实现List接口,可增长的对象数组。
- 底层实现为数组,查询快,增删慢**
- 是同步的 (单线程) 。
从Java 2平台v1.2开始,该类被改进以实现List接口,使其成为Java
Collections Framework的成员。
与新的集合实现不同, Vector是同步的。
如果不需要线程安全实现,建议使用ArrayList代替Vector 。
LinkedList集合
java.util.LinkedList
特点:
- 实现了List接口
- 底层是一个双向链表结构:查询慢,增删快
- LinkedList集合中包含了一些操作首尾元素的方法
操作首尾元素的方法
- 添加首尾元素
public void addFirst(E e)
将指定元素插入此列表的开头。public void addLast(E e)
将指定元素添加到此列表的结尾。等效于add()方法public void push(E e)
将元素推入此列表所表示的堆栈。等效于addFirst()方法
private static void show01() {
//创建LinkedList集合对象
LinkedList<String> linked = new LinkedList<>();
//往集合中添加元素
linked.add("aaa");
linked.add("bbb");
linked.add("ccc");
linked.add("ddd");
linked.add("aaa");
System.out.println(linked);//[aaa, bbb, ccc, ddd, aaa]
//public void addFirst(E e) :将指定元素插入此列表的开头。
//public void push(E e) :将元素推入此列表所表示的堆栈。等效于addFirst()方法
//linked.addFirst("www");
linked.push("www");
System.out.println(linked);//[www, aaa, bbb, ccc, ddd, aaa]
//public void addLast(E e) :将指定元素添加到此列表的结尾。等效于add()方法
linked.addLast("com");
//linked.add("com");
System.out.println(linked);//[www, aaa, bbb, ccc, ddd, aaa, com]
}
- 获取首尾元素
public E getFirst()
返回此列表的第一个元素。public E getLast()
返回此列表的后一个元素。
private static void show02() {
//创建LinkedList集合对象
LinkedList<String> linked = new LinkedList<>();
//往集合中添加元素
linked.add("aaa");
linked.add("bbb");
linked.add("ccc");
linked.add("ddd");
//linked.clear();//如果集合中没有元素,NoSuchElementException
//防止程序抛出异常
if(!linked.isEmpty()) {
String first = linked.getFirst();
System.out.println(first);//aaa
String last = linked.getLast();
System.out.println(last);//ddd
}
}
- 移除首尾元素
public E removeFirst()
移除并返回此列表的第一个元素。public E removeLast()
移除并返回此列表的后一个元素。public E pop()
从此列表所表示的堆栈处弹出一个元素。等效于removeFirst()方法
private static void show03() {
//创建LinkedList集合对象
LinkedList<String> linked = new LinkedList<>();
//往集合中添加元素
linked.add("aaa");
linked.add("bbb");
linked.add("ccc");
linked.add("ddd");
System.out.println(linked);//[aaa, bbb, ccc, ddd]
//linked.clear();
//String first = linked.removeFirst();
String pop = linked.pop();
System.out.println(pop);//aaa
String last = linked.removeLast();
System.out.println(last);//ddd
System.out.println(linked);//[bbb, ccc]
}