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方法。
相关文章推荐
- Java基础知识强化之集合框架笔记08:Collection集合自定义对象并遍历案例(使用迭代器)
- 黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable HashMap TreeMap
- Java学习系列(八)Java面向对象之集合框架详解(下)
- Java面向对象-集合框架(LinkedList,Map)
- JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用
- 黑马程序员 java 基础 毕向东 面向对象 集合框架 List Set
- Java学习系列(八)Java面向对象之集合框架详解(下)
- JAVA之旅(十八)——基本数据类型的对象包装类,集合框架,数据结构,Collection,ArrayList,迭代器Iterator,List的使用
- Java基础知识强化之集合框架笔记06:Collection集合存储自定义对象并遍历的案例
- Java基础知识强化之集合框架笔记13:Collection集合存储学生对象并遍历
- Java学习系列(七)Java面向对象之集合框架详解(上)
- Java学习系列(七)Java面向对象之集合框架详解(上)
- Java学习系列(八)Java面向对象之集合框架详解(下)
- Java学习系列(七)Java面向对象之集合框架详解(上)
- java面向对象第7章 集合框架
- 黑马程序员 java 基础 毕向东 面向对象 集合框架 工具类 Collections and Arrays
- 【黑马程序员】java中----------Collection集合框架
- Java 集合框架(Collection)和数组的排序
- [Java基础] 持有对象(集合框架)-Set-TreeSet
- Java 集合框架02---Collection的源码分析