实线方块是实现类、
虚线方块是虚拟类、
虚点方块是接口、
实线箭头是实现,虚线箭头是继承
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口
import java.util.ArrayList; public class arraylist { public static void main(String[] args) { ArrayList<String> s=new ArrayList<>(); s.add("q"); s.add("9"); s.add("8"); System.out.println(s); System.out.println(s.get(0)); s.set(1,"1"); System.out.println(s); s.remove(0); System.out.println(s); System.out.println(s.size()); for (int i =0;i<s.size();i++){ System.out.println(s.get(i)); } for (String i:s) { System.out.println(i); } } }
二、链表(LinkedList)
链表可分为单向链表和双向链表。
一个单向链表:数值、下一个节点的链接
一个双向链表:数值、向后的节点链接、向前的节点链接
与 ArrayList 相比,LinkedList 的 新增和删除 对操作效率更高,而查找和修改的操作效率较低。
以下情况使用 ArrayList :
1、频繁访问列表中的某一个元素。
2、只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
1、你需要通过循环迭代来访问列表中的某些元素。
2、需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作
三、HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问
import java.util.HashSet; public class hashset { public static void main(String[] args) { HashSet<String> sites = new HashSet<String>(); sites.add("Google"); sites.add("Runoob"); sites.add("Taobao"); sites.add("Zhihu"); sites.add("Runoob"); // 重复的元素不会被添加 System.out.println(sites); System.out.println(sites.size()); // 计算大小 System.out.println(sites.contains("Taobao")); // 判断元素是否存在 for (String s : sites) { System.out.println("===" + s); // 因为是无序的,所以打印出来的顺序并不是添加的顺序 } sites.remove("Taobao"); // 删除元素,删除成功返回 true,否则为 false System.out.println(sites); sites.clear(); System.out.println(sites); } }
四、HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
import java.util.HashMap; public class 集合hashmap { public static void main(String[] args) { HashMap<Integer, String> Sites = new HashMap<Integer, String>(); // 添加键值对 Sites.put(1, "Google"); Sites.put(2, "Runoob"); Sites.put(3, "Taobao"); Sites.put(4, "Zhihu"); System.out.println(Sites); System.out.println(Sites.get(3)); Sites.remove(4); System.out.println(Sites.size()); // 元素数量 for (int i: Sites.keySet()){ System.out.println(i+ Sites.get(i)); } for (String s:Sites.values()) { System.out.println(s); } } }
五、Iterator
import java.util.ArrayList; import java.util.LinkedList; import java.util.Iterator; public class 迭代器 { public static void main(String[] args) { // 创建集合 LinkedList<String> sites = new LinkedList<String>(); sites.add("Google"); sites.add("Runoob"); sites.add("Taobao"); sites.add("Zhihu"); // 获取迭代器 Iterator<String> it = sites.iterator(); // 输出集合中的所有元素 while(it.hasNext()) { System.out.println(it.next()); } } }