黑马程序员——集合类(二)

来源:互联网 发布:算法相同软件著作权 编辑:程序博客网 时间:2024/05/16 06:50

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

集合分类

Collection集合一次的话只能存储一个对象,是单列的集合

collection集合有俩个小弟List和Set集合

List它的特点是可以重复的,有索引的,有序的

ArrayList的底层是以数组实现的,它增删比较慢但是查找较快,线程不安全。

LinkedList的底层是以链表结构实现的,它增删快查找慢,线程不安全的。

Vetor的底层和ArrayList一样都是以数组结构实现的,线程是安全的。

Set的特点是无重复的,无序的,无索引的

HashSet底层数据结构是哈希表。是线程不安全的,但是效率高。依赖于元素的hashcode和equals方法

TreeSet底层数据机构是二叉树。是用来排序的,对象按照指定的顺序排列

LinkedHashSet是HashSet的子类。底层由哈希表和链表实现。有序:指的是取出时的顺序同存入时的顺序相同

HashSet

set集合合是无重复的,引入哈希算法可以提高去重复性的效率,降低equals()的使用次数。

重写hashCode()方法,可以让hashCode()返回一个固定值,进而让HashSet的add方法去使用equals()判断;

如果没有哈希值相同的对象就直接存入集合

如果有哈希值相同的对象,就在让它逐个进行equals()比较。比较的结果实true的时候就舍弃,false存进集合中

     如果自己写自定义对象时,需要在自己的类中重写Object类的hashCode()方法equals()方法

迭代器

List

1.使用for增强循环逐个遍历,使用get()方法

2.使用数组把元素装进数组,再用for循环遍历

3.增强for循环只要Itertor的类都可以使用

4.Vector集合可以使用Enumeration的hasMoreElements()和nextElement()方法

set

1.使用集合类中的itertor()方法调用hashNext方法和next()方法

2.使用增强for循环

TreeSet

TreeSet采用二叉树的数据结构进行排序元素,使用它可以从Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定义类时,TreeSet需要维护元素的存储顺序,因此自定义类要实现Comparable接口并定义compareTo方法。(不会 添加重复的元素,自然排序,不可以添加null否则回报(NullPointException))

俩种排列方法

排序方式一: 要让自定义对象是实现 Comparable接口,强制让对象具有比较性。,排序时当主要条件相同时,一定要判断下次要条件。然后重写compareTo()方法。
  如果想要按原样顺序输出,则让compareTo()方法返回 
排序方式二:当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。 在集合初始化的时候,就让集合具有比较性。

定义比较器,将比较器作为参数传递给TreeSet集合的构造函数。

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

0 0