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 }

 

posted @ 2020-08-26 16:30  mingmingn  阅读(167)  评论(0)    收藏  举报