1-5-2 Java工具类--集合
集合体系结构

Collection
主要用于存储类的对象
Collection下有三个子接口,分别是List、Queue和Set,List和Queue中可以存储有序且重复的数据,Set中存储的数据是无序且不允许重复。
1、 List接口的主要实现类包括ArrayList和LinkedList,LinkedList同时实现了Queue接口
ArrayList的底层实现是数组,因此在内存中是连续存储的。查询速度快,但增加和删除速度慢。
LinkedList底层是基于双向链表的,增加和删除速度快,查询速度慢。
2、 Set接口的主要实现类有HashSet和TreeSet
HashSet是基于哈希表实现的,数据是无序的,HashSet元素可以是null,但只能有一个null。
TreeSet是基于二叉树实现的,可以实现数据的自动排序,确保集合元素处于排序状态,不允许放入
HashSet的性能优于TreeSet,一般情况下建议使用HashSet,如果需要使用排序功能建议使用TreeSet
Map
主要用于存储键值对的数据
Map的主要实现类包括HashMap和TreeMap,其中HashMap基于哈希表实现,TreeMap基于红黑树实现。
HashMap适用于在Map中插入、删除和定位元素
TreeMap适用于按自然顺序或自定义顺序对键值进行遍历
HashMap比TreeMap性能好,所以HashMap使用更多一些,如果需要对数据进行排序可以使用TreeMap
hashCode和equals方法的作用
hashCode()方法用于给对象返回hash code值,equals()方法用于判断其他对象与该对象是否相等。为什么需要这两个方法呢?我们知道HashSet中是不允许添加重复元素的,那么当调用add()方法向HashSet中添加元素时,是如何判断两个元素是不同的。这就用到了hashCode()和equals()方法。在添加数据时,会调用hashCode()方法得到hash code值,通过这个值可以找到数据存储位置,该位置可以理解成一片区域,在该区域存储的数据的hashCode值都是相等的。如果该区域已经有数据了,就继续调用equals()方法判断数据是否相等,如果相等就说明数据重复了,就不能再添加了。如果不相等,就找到一个位置进行存储。
关于getClass和.class的作用
首先,来看一下Class类。在Java中,万事万物皆对象,每个类都有一个相应的Class对象。通过Class类,可以获得一个类的基本信息,比如属性、方法和构造方法等。
getClass()是Object类的方法,该方法的返回值类型是Class类,通过getClass()方法可以得到一个Class类的对象。而.class返回的也是Class类型的对象。所以,如果obj.getClass()和Cat.class返回的内容相等,说明是同一个对象。
既然都可以得到Class的对象,关于getClass()和.class的区别:getClass()方法,有多态能力,运行时可以返回子类的类型信息。.class是没有多态的,是静态解析的,编译时可以确定类型信息。
Map中获取key-value值的方法
1 import java.util.*; 2 8 public class Test { 9 public static void main(String[] args) { 10 Map<String, String> map = new HashMap<>(); 11 map.put("apple", "苹果"); 12 map.put("banana", "香蕉"); 13 map.put("orange", "橘子"); 14 // getKeyAndValue(map); 15 // getKey(map); 16 getValue(map); 17 } 18 19 20 public static void getKeyAndValue(Map<String, String> map) { 21 Set<Map.Entry<String, String>> entrySet = map.entrySet(); 22 Iterator<Map.Entry<String, String>> it = entrySet.iterator(); 23 while (it.hasNext()) { 24 Map.Entry<String, String> entry = it.next(); 25 System.out.println(entry.getKey() + " " + entry.getValue()); 26 } 27 } 28 29 public static void getKey(Map<String, String> map) { 30 Set<String> keySet = map.keySet(); 31 Iterator<String> it = keySet.iterator(); 32 while (it.hasNext()) { 33 String key = it.next(); 34 System.out.println(key + " " + map.get(key)); 35 } 36 } 37 38 public static void getValue(Map<String, String> map) { 39 Collection<String> values = map.values(); 40 Iterator<String> it = values.iterator(); 41 while (it.hasNext()) { 42 String value = it.next(); 43 System.out.println(value); 44 } 45 } 46 }

浙公网安备 33010602011771号