继承于Collection体系的单列集合
List系列集合:添加的元素是有序、可重复、有索引
Set系列集合:添加的元素是无序、不可重复、无索引
1.调用 Collection接口
public class CollectionTest { public static void main(String[] args) { /* 调用 Collection接口 */ Collection<String> coll = new ArrayList<>(); coll.add("张三"); coll.add("李四"); coll.add("王五"); coll.add("赵六"); coll.add("杨七"); System.out.println(coll); coll.remove("赵六"); System.out.println(coll); coll.clear(); System.out.println(coll); System.out.println("*********************************************************"); /* 创建集合的对象 */ Collection<Student> coll1 = new ArrayList<>(); Student s1=new Student("孙悟空",15); Student s2=new Student("猪八戒",20); Student s3=new Student("沙和尚",38); Student s4=new Student("唐僧",50); coll1.add(s1); coll1.add(s2); coll1.add(s3); coll1.add(s4); for (Student student : coll1) { System.out.println(student.getName()); System.out.println(student.getAge()); } /* [张三, 李四, 王五, 赵六, 杨七] [张三, 李四, 王五, 杨七] [] ********************************************************* 孙悟空 15 猪八戒 20 沙和尚 38 唐僧 50 * */ } }
2. List集合的构造,
public class ListTest2 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.add("王五"); list.add("赵六"); list.add("杨七"); list.add("杨七"); list.add("杨七"); System.out.println(list); System.out.println(list.get(1)); //可获取索引处的值 LinkedList<Integer> list1 = new LinkedList<>(); list1.add(1); list1.add(2); list1.add(3); System.out.println(list1); /*运行结果 [张三, 李四, 王五, 赵六, 杨七, 杨七, 杨七] 李四 [1, 2, 3] */ } }
3. ArrayList和LinkedList的区别
底层数据结构不同。ArrayList是动态数组的数据结构,可以通过下标的方式,快速找到对应内容,但是在进行插入和删除时,相对会比较慢,需要将插入位置后面的数组全部都往后移动对应的位数,或者将删除位置的数组全部向前移动,适用于查多改少的场景。LinkedList是链表的数据结构,需要进行查询时,需要遍历所有的数据进项查询,相对比较复杂;而进行数据插入时,只需要将pre指向上一个数据的next,next指向下一个数据pre,因此适用于查少改多的场景。
4.Set集合的构造
Set集合的方法上基本上与Collection的API一致,Set集合的实现类有以下特点
HashSet: 无序、不重复、无索引
LinkedHashSet: 有序、不重复、无索引
TreeSet: 可排序、不重复、无索引
5. 调用Set接口
public class SetTest { public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("张三"); set.add("李四"); set.add("王五"); set.add("赵六"); set.add("杨七"); set.add("杨七"); set.add("杨七"); System.out.println(set); //[李四, 张三, 王五, 杨七, 赵六] HashSet<Integer> set1 = new HashSet<>(); set1.add(5); set1.add(6); set1.add(8); set1.add(10); set1.add(1); System.out.println(set1); LinkedHashSet<Integer> set2 = new LinkedHashSet<>(); set2.add(5); set2.add(6); set2.add(8); set2.add(10); set2.add(1); System.out.println(set2); TreeSet<Integer> set3 = new TreeSet<>(); set3.add(5); set3.add(6); set3.add(8); set3.add(10); set3.add(1); System.out.println(set3); } }
输出结果
继承于Map体系的双列集合
HashMap:无序、不重复、无索引;
LinkedHashMap: 按照插入的顺序有序、不重复、无索引。
TreeMap :按照值大小默认升序排序、不重复、无索引。
public class MapTest { public static void main(String[] args) { HashMap<String,Integer> hashMap = new HashMap<>(); hashMap.put("手机",21); hashMap.put("手表",25); hashMap.put("手表",87); hashMap.put("手表",8); hashMap.put("手表",2); hashMap.put("电话",52); hashMap.put("耳机",30); System.out.println(hashMap); System.out.println(hashMap.get("手表")); System.out.println("*********************************************************"); LinkedHashMap<String,Integer> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("篮球",21); linkedHashMap.put("足球",25); linkedHashMap.put("乒乓球",2); linkedHashMap.put("排球",8); linkedHashMap.put("保龄球",52); linkedHashMap.put("羽毛球",30); System.out.println(linkedHashMap); System.out.println(linkedHashMap.get("保龄球")); System.out.println("*********************************************************"); TreeMap<Integer,String> treeMap = new TreeMap<>(); treeMap.put(3,"橡皮"); treeMap.put(25,"本子"); treeMap.put(1,"修正液"); treeMap.put(2,"胶带"); treeMap.put(10,"笔"); treeMap.put(5,"文具盒"); System.out.println(treeMap); System.out.println(treeMap.get(10)); } }
HashMap
适用于需要快速查找和插入键值对的场景,TreeMap
适用于需要对键进行排序的场景,而LinkedHashMap
适用于需要保持插入顺序的场景。