黑马程序员--面向对象之七:Collection集合框架

来源:互联网 发布:编写c语言程序步骤 编辑:程序博客网 时间:2024/06/05 14:58

--------------JavaEE+Android+IOS开发、android培训、期待与您交流! ---------------



这是我从网上找到的一张集合框架图,复习的时候我就是照着这个框架来进行的,当然图中除了Collection集合框架还包含了Map集合。

从右边从上到下整理归纳:

一、List

List:元素师有序的,元素可以重复,因为带索引。

ArrayList:底层的数据结构使用的是Array结构,线程不同步。(查、改效率高)

LinkedList:底层使用的是链表数据结构。(增删效率高)

Vector:底层使用的是数组,效率低,JDK1.0,线程同步。(枚举)


LinkedList 特有方法:

getFirst();getLast();为空抛NOSuchException (JDK1.6被peekFirst();peekLast();替代,为空返回null)获取元素,但不删除。

removeFirst();removeLast();为空抛NOSuchException(JDK1.6被pollFirst();pollLast();替代,为空返回null)获取元素并删除。

这里记住一个Test,模拟堆栈(FILO)和队列(FIFO)。

注意几个上课老师讲得点:

对于去除ArrayList重复元素,需注意:

1、在迭代循环中next调用一次,就要hashNext判断一次。

2、List集合判断元素是否相同,依据的是元素的equals方法。这时候需要复写Object的equals方法。


二、Set

Set:元素无序,元素不可以重复。

HashSet:底层数据结构是哈希表,线程是非同步的。

HashSet是通过两个方法:hashcode和equsls来保证元素唯一性的。

hashcode相同才调用equals。

对于判断元素是否存在,以及删除等操作,依赖的方法都是hashcode和equals。

import java.util.*;/*|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。HashSet是如何保证元素唯一性的呢?是通过元素的两个方法,hashCode和equals来完成。如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不会调用equals。注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。|--TreeSet:Set集合的功能和Collection是一致的。*/class HashSetDemo {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {HashSet hs = new HashSet();sop(hs.add("java01"));sop(hs.add("java01"));hs.add("java02");hs.add("java03");hs.add("java03");hs.add("java04");Iterator it = hs.iterator();while(it.hasNext()){sop(it.next());}}}

 

TreeSet:可以对Set集合中的元素进行排序。

所以往里面存的对象必须由比较性。实现Comparable接口。

TreeSet底层数据结构是二叉树。

保证元素唯一性:compareTo方法return 0;

TreeSet排序有两种方式:

第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,复写compareTo方法。这种方式称为元素自然顺序,或者叫做默认顺序。

TreeSet第二种排序方式:

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

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

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

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

/*练习:按照字符串长度排序。字符串本身具备比较性。但是它的比较方式不是所需要的。这时就只能使用比较器。*/import java.util.*;class  TreeSetTest{public static void main(String[] args) {TreeSet ts = new TreeSet(new StrLenComparator());ts.add("abcd");ts.add("cc");ts.add("cba");ts.add("aaa");ts.add("z");ts.add("hahaha");Iterator it = ts.iterator();while(it.hasNext()){System.out.println(it.next());}}}class StrLenComparator implements Comparator{public int compare(Object o1,Object o2){String s1 = (String)o1;String s2 = (String)o2;/*if(s1.length()>s2.length())return 1;if(s1.length()==s2.length())return 0;*/int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));if(num==0)return s1.compareTo(s2);return num;}}



学习心得:本篇对Collection集合框架中的List和Set进行知识点的盘点,需要着重注意的是List集合判断元素是否相同,依据的是元素的equals方法。而HashSet是通过两个方法:hashcode和equsls来保证元素唯一性的。TreeSet排序有两种方式,一种实现Comparable接口,复写compareTo方法,一种定义比较器,定义类实现Comparator,复写compare方法。

 --------------JavaEE+Android+IOS开发android培训、期待与您交流! ---------------


原创粉丝点击