public class Test{ public static void main(String[] args) { Collection<String> c = new ArrayList<>();//多态 c.add("1"); c.add("2"); c.add("a"); Iterator<String> it = c.iterator(); while (it.hasNext()){ String ele = it.next();//指向 System.out.println(ele);//打印 }
public class Test { public static void main(String[] args) { // 使用泛型指定 ArrayList 的元素类型为 String List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add(2, "aaa"); // 在索引 2 处插入元素 "aaa" list.remove(2);//删除数据,但是会返回数据 list.get(2);//根据索引取元素 list.set(2,"s");//将索引设置为某个值,然后返回原来的数据 } }
遍历方式
for循环是可以直接使用的(因为他有索引)
Collection的三种遍历方式也是可以继续使用的
ArrayList和LinkedList的底层采用的数据结构是不同的
ArrayList是基于数组实现的,根据索引查询速度比较快。但是删除效率比较低,添加效率也比较低
LinkedList
是基于双链表实现的
特点
查询慢,无论如何都要从头开始查
链表的增删比较快
双向链表的查询比单向链表的查询更快一点,双向链表在首尾进行增删改查的速度是极快的
还有对首部和尾部操作的特定方法
应用场景:
队列 一般就是先进先出,后进后出
栈
栈的特点是,后进先出,先进后出,一端开口,一端不开
进栈叫压,在后面叫栈底元素
出栈叫弹,在前面叫栈顶元素
例如手枪的弹夹
简单的栈的实例
1 2 3 4 5 6 7 8 9 10 11 12
public class Test { public static void main(String[] args) { LinkedList<String> queue = new LinkedList<>(); queue.addFirst("yi"); queue.addFirst("er"); queue.addFirst("san"); queue.addFirst("si"); queue.removeFirst(); queue.removeFirst(); System.out.println(queue); } }
push = addFirst
pop = removeFirst
Set集合
特点
添加的元素是无序的,是没有索引的,不重复的
1 2 3 4 5 6 7 8 9 10 11 12
import java.util.HashSet; import java.util.Set;
public class Test { public static void main(String[] args) { Set<Integer> set = new HashSet<>();//经典代码,多态 set.add(66); set.add(777); System.out.println(set);
public class Test { public static void main(String[] args) { Set<Integer> set = new TreeSet<>(); set.add(1); set.add(3); set.add(77); System.out.println(set);