您的位置:首页 > 编程语言 > Java开发

Java--面向对象之七:Collection集合框架

2013-09-06 14:15 369 查看


这是我从网上找到的一张集合框架图,复习的时候我就是照着这个框架来进行的,当然图中除了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方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐