Set集合、Map集合

 

 1、HashSet 集合

● 特点:

底层数据结构:哈希表;存储、取出比较快;线程不安全,运行速度快(HashSet的底层是用HashMap实现的,因此查询效率较高,由于采用hashCode算法直接确定元素的内存地址,增删效率也挺高的)

● HashSet集合存储数据的结构(哈希表)

哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表。

当向哈希表中存放元素时,需要根据元素的特有数据结合相应的算法,这个算法其实就是Object类中的hashCode方法。由于任何对象都是Object类的子类,所以任何对象有拥有这个方法。即就是在给哈希表中存放对象时,会调用对象的hashCode方法,算出对象在表中的存放位置,这里需要注意,如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突,这时会调用对象的equals方法,比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放在哈希表中,如果返回的是false,就会把这个值存放在哈希表中。

总结:保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。

● ArrayList 和 HashSet 判断元素重复

ArrayList--contains(Object o)方法,本质:调用 equals()方法。

HashSet--contains(Object o)方法,add(E e)方法。

 

2、Map 集合

● 注意:Map 接口中的集合都有两个泛型变量<K,V>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量<K,V>,的数据类型可以相同,也可以不同。

● Hashtable 是 Map 的子类,1.2版本后被 HashMap 取代,但是它的子类 Properties 依然在使用。

 

3、jdk 1.5 新特性之静态导入

作用:减少开发的代码量
静态导入的语法:import static 包名.类名.静态成员变量;

        import static 包名.类名.静态成员函数;

注意:导入的是成员变量和方法名。

弊端:过度地使用静态导入会在一定程度上降低代码的可读性。

● 示例:

1 import static java.lang.System.out;
2 
3 public class StaticImportDemo {
4     public static void main(String[] args) {
5         out.println("abc");
6     }
7 }

 

4、Collections 类

binarySearch() 找不到返回的结果:(-(insertion point) - 1)

posted @ 2018-11-30 15:20  FanYiZhan  阅读(176)  评论(0编辑  收藏  举报