黑马程序员_集合框架 Collection

来源:互联网 发布:苹果cms手机模板破解 编辑:程序博客网 时间:2024/05/16 01:44
------- android培训java培训、期待与您交流! ----------

 

Collection
         |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
                      |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
                      |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
                      |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。


        |--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、

                                Set集合的功能和Collection是一致的。
                      |--HashSet: 底层数据结构是哈希表。是线程不安全的。不同步。
                                            HashSet是如何保证元素唯一性的呢?
                                           是通过元素的两个方法,hashCode和equals来完成。
                                            如果元素的HashCode值相同,才会判断equals是否为true。
                                           如果元素的hashcode值不同,不会调用equals。

                                           注意,对于判断元素是否存在,以及删除等操作,

                                            依赖的方法是元素的hashcode和equals方法。

注意:如果对象存进了HashSet集合以后,把对象的哈希值改变了,则对象不能从原来集合中取出或删除,有可能会造成内存泄露。


                     |--TreeSet:可以对set集合中的元素进行排序。底层数据结构是二叉树。

                                           保证元素唯一性依据:conpareTo方法 return 0.

                                            TreeSet排序第一种方式:

                                           让元素自身具备比较性。元素需要实现ConpareTo方法。

                                            也叫做自然顺序或者默认排序。

                                           TreeSet的第二种排序方式:
                                            当元素自身不具备比较性时,或者具备的比较性不是所需要的。
                                            这时就需要让集合自身具备比较性。
                                             在集合初始化时,就有了比较方式。

                                             

                                       当 两种排序都存在时,以比较器为主。

                                       定义一个类,实现Comparator接口,覆盖compare方法。

 

------------------------------------------------------------------------

list集合:

方法:


 add(index,element);
 addAll(index,Collection);


 remove(index);


 set(index,element);

 get(index):
 subList(from,to);
 listIterator();
 int indexOf(obj):获取指定元素的位置。
 ListIterator listIterator();

 

凡是可以操作角标的方法都是list体系特有的方法。

List集合特有的迭代器。ListIterator是Iterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

该接口只能通过List集合的listIterator方法获取。

-------------------------------------------------------

LinkedList集合:

LinkedList:特有方法:
addFirst();
addLast();

getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

 

在JDK1.6出现了替代方法。

offerFirst();
offerLast();


peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。

pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。

-----------------------------------------------------------------------

泛型:

泛型定义在方法上要放在返回值类型前面。

<?>表示任意类型。?占位符

泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限

静态方法不可以访问类上定义的泛型。因为类的泛型是要new对象的。静态不能访问非静态。

如果静态方法操作的应用类型不确定,可以将泛型定义在方法上。

 

 

------- android培训java培训、期待与您交流! ----------
原创粉丝点击