一、Java集合的分类
Java集合可以根据它们的功能和用途分为三个主要类别:List,Set和Map。
1. List
List是一个有序的集合,可以重复存储元素。List中的每个元素都有一个关联的索引,该索引可以用来访问和搜索List中的元素。Java中最常用的List类型是ArrayList和LinkedList。ArrayList是一个由动态数组实现的List,它可以自动增长以容纳新元素。LinkedList是一个由双向链表实现的List,它提供了一些额外的添加、删除和遍历方法。
2. Set
Set是一个不带重复元素的集合。Java中最常用的Set类型是HashSet和TreeSet。HashSet是一个哈希表实现的Set,它提供了O(1)的插入、删除和查询时间。TreeSet是一个基于红黑树的Set,它提供了一个有序的视图。
3. Map
Map是一个键值对的集合。每个元素包含一个键和一个值。Java中最常用的Map类型是HashMap和TreeMap。HashMap是一个哈希表实现的Map,它提供了O(1)的插入、删除和查询时间。TreeMap是一个基于红黑树的Map,它提供了一个有序的视图。
二、集合的一些基本操作
1. 添加元素
List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); Set<String> set = new HashSet<>(); set.add("Java"); set.add("Python"); set.add("C++"); Map<Integer, String> map = new HashMap<>(); map.put(1, "Java"); map.put(2, "Python"); map.put(3, "C++");
2. 遍历集合
List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); for(String s : list) { System.out.println(s); } Set<String> set = new HashSet<>(); set.add("Java"); set.add("Python"); set.add("C++"); for(String s : set) { System.out.println(s); } Map<Integer, String> map = new HashMap<>(); map.put(1, "Java"); map.put(2, "Python"); map.put(3, "C++"); for(Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); }
3. 删除元素
List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); list.remove("Python"); Set<String> set = new HashSet<>(); set.add("Java"); set.add("Python"); set.add("C++"); set.remove("Python"); Map<Integer, String> map = new HashMap<>(); map.put(1, "Java"); map.put(2, "Python"); map.put(3, "C++"); map.remove(2);
三、集合的常见操作
1. 数组转换为List
String[] array = {"Java", "Python", "C++"}; List<String> list = Arrays.asList(array);
2. List转换为数组
List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); String[] array = list.toArray(new String[list.size()]);
3. 判断集合是否为空
List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); if(list.isEmpty()) { System.out.println("List is empty!"); } else { System.out.println("List is not empty!"); } Set<String> set = new HashSet<>(); set.add("Java"); set.add("Python"); set.add("C++"); if(set.isEmpty()) { System.out.println("Set is empty!"); } else { System.out.println("Set is not empty!"); } Map<Integer, String> map = new HashMap<>(); map.put(1, "Java"); map.put(2, "Python"); map.put(3, "C++"); if(map.isEmpty()) { System.out.println("Map is empty!"); } else { System.out.println("Map is not empty!"); }
4. 集合的排序
Java中的集合可以通过Comparable接口(自然排序)或Comparator接口(自定义排序)来实现排序。以下是一个使用Comparator接口对List进行排序的示例代码:
List<Student> list = new ArrayList<>(); list.add(new Student("Tom", 21)); list.add(new Student("Jerry", 22)); list.add(new Student("Lucy", 20)); //自定义比较器 Comparator<Student> comparator = new Comparator<>() { @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } }; Collections.sort(list, comparator);
四、Java集合与常用逻辑用语知识点总结
1. 集合的判空
在Java中,可以使用isEmpty()方法来判断集合是否为空。
List<String> list = new ArrayList<>(); if(list.isEmpty()) { System.out.println("list is empty!"); }
2. 集合的判等
Java中,可以使用equals()方法来判断两个集合是否相等。注意,List、Set和Map之间不能直接比较,必须使用对应的equals()方法进行比较。
List<String> list1 = new ArrayList<>(); list1.add("Java"); list1.add("Python"); list1.add("C++"); List<String> list2 = new ArrayList<>(); list2.add("Java"); list2.add("Python"); list2.add("C++"); if(list1.equals(list2)) { System.out.println("list1 equals list2"); } Set<String> set1 = new HashSet<>(); set1.add("Java"); set1.add("Python"); set1.add("C++"); Set<String> set2 = new HashSet<>(); set2.add("Java"); set2.add("Python"); set2.add("C++"); if(set1.equals(set2)) { System.out.println("set1 equals set2"); } Map<Integer, String> map1 = new HashMap<>(); map1.put(1, "Java"); map1.put(2, "Python"); map1.put(3, "C++"); Map<Integer, String> map2 = new HashMap<>(); map2.put(1, "Java"); map2.put(2, "Python"); map2.put(3, "C++"); if(map1.equals(map2)) { System.out.println("map1 equals map2"); }
3. 集合的比较
Java中,可以使用对象的compareTo()方法来比较两个对象的大小。对于List、Set和Map等集合,需要先将其转换为数组或List,然后进行比较。
List<String> list1 = new ArrayList<>(); list1.add("Java"); list1.add("Python"); list1.add("C++"); List<String> list2 = new ArrayList<>(); list2.add("Java"); list2.add("Python"); list2.add("C++"); String[] array1 = list1.toArray(new String[list1.size()]); String[] array2 = list2.toArray(new String[list2.size()]); int result = Arrays.compare(array1, array2); if(result == 0) { System.out.println("array1 equals array2"); } else if(result < 0) { System.out.println("array1 is less than array2"); } else { System.out.println("array1 is greater than array2"); }
4. 集合的逻辑计算
Java中,可以使用contains()、containsAll()、remove()、removeAll()、retainAll()等方法进行集合的逻辑计算。以下是一个使用containsAll()方法判断两个List交集的示例代码:
List<String> list1 = new ArrayList<>(); list1.add("Java"); list1.add("Python"); list1.add("C++"); List<String> list2 = new ArrayList<>(); list2.add("Python"); list2.add("JavaScript"); if(list1.containsAll(list2)) { System.out.println("list1 contains list2"); } else { System.out.println("list1 does not contain list2"); }
五、总结
Java集合是Java程序员必须掌握的知识点。本文从Java集合的分类、基本操作、常见操作、Java集合与常用逻辑用语知识点总结等多个方面进行了详细的阐述。希望读者们能够通过本文更加深入的理解Java集合,并且在日后的Java开发中能够灵活使用。