七七八八打印zi

HashCode 、 Equals和集合总结

2016-09-25  本文已影响28人  ssddd1200

HashCode&& Equals 总结

一、equals:默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。若是类中覆盖了equals方法,要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。

二、HashCode:获得对象的哈希值,只有在集合中用到。

当HashCode与Equals方法都覆盖后:

1、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等)。

2、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入。

3、将元素放入集合的流程图:

集合总结

1、线程安全:线程安全就是说多线程访问同一代码,不会产生不确定的结果。线程安全集合类与非线程安全集合类如下:

LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;

HashMap是非线程安全的,HashTable是线程安全的;

StringBuilder是非线程安全的,StringBuffer是线程安全的。

2、:List类和Set类是Collection集合接口的子接口。

Set和List对比:

Set:无序,保证元素的单一性。检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

List:有序,可以有重复元素。和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

Set的子类----HashSet:HashSet的底层是以哈希表的形式存放元素,插入删除速度很快。它保证元素唯一性的方式是根据元素的两个方法完成的,一个是hashcode,一个是equals。

SortedSet:接口------实现类:TreeSet:用于给Set集合中的元素按照指定的顺序进行排序。TreeSet是通过元素对象的比较方法的返回值来确定的。如果为0,那么视两个元素为相同元素,丢弃一个不存。因此TreeSet一定要明确主要条件和次要条件。

有两种比较的方法:1、连接Comparable 接口,实现接口中的 compareTo 方法2、定义一个比较的对象的类实现Comparator接口中的compar(Type x,Type y)方法,在实例化时将该规则类添加上去。

迭代器Iterator:hasNext();next();remove();Iterable:可迭代的,访问的;java.lang;实现了可迭代的接口就可以用迭代的方式访问;只需实现iterator();方法即可。

List的具体子类:

1、ArrayList:动态数组,自动扩容

2、LinkedList:链表、队列、堆栈。

3、Vector

MAP特点:

1、它也是集合框架中的顶层。

2、它一次存储一对元素。一个叫键,一个叫值。也就是键值对。Collection一次存一个,称为单列集合。Map一次存储一对,称为双列集合。

3、Map集合中必须保证键的唯一性。其实MAP集合中存储的都是映射关系。如果存储键值对时,键出现重复,新值覆盖旧值。

MAP集合常见的方法:1.添加value put(key,value);value putAll(key,value);

2、删除:value Remove(key);void clear();

3、判断:boolean containsKey(key);

4.获取:int size();value get(key);

HashMap和Hashtable的区别都属于Map接口的类,实现了将惟一键映射到特定的值上。HashMap类没有分类或者排序。它允许一个null键和多个null值。Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢因为它是同步的。

5、集合适用场景

Set或Map适用于查找和删除较为频繁,且元素数量较多的应用,

ArrayList适用于通过为位置来读取元素的场景;

LinkedList 适用于要头尾操作或插入指定位置的场景;

Vector 适用于要线程安全的ArrayList的场景;

Stack 适用于线程安全的LIFO场景;

HashSet 适用于对排序没有要求的非重复元素的存放;

TreeSet 适用于要排序的非重复元素的存放;

HashMap 适用于大部分key-value的存取场景;

TreeMap 适用于需排序存放的key-value场景。

集合框架的工具类:

Collections:负责给集合提供工具方法的方法类。而且该工具类中的方法都是静态的。

Arrays:此类包含用来操作数组(比如排序和搜索)的各种方法,包含一个允许将数组作为列表来查看的静态工厂。

Collection和Collections的区别。

Collection是集合类的上级接口,继承与他的接口主要有Set和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

上一篇下一篇

猜你喜欢

热点阅读