黑马程序员--面向对象之七: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培训、期待与您交流! ---------------
- 黑马程序员--面向对象之七:Collection集合框架
- 黑马程序员-集合框架之Collection
- 黑马程序员-集合框架之Collection
- 黑马程序员-------集合框架之Collection
- 黑马程序员java之集合框架Collection
- 黑马程序员 Java面向对象——集合框架(Collection)
- 黑马程序员--Java面向对象——集合框架(Collection)
- 黑马程序员--集合框架(collection)
- 黑马程序员--集合框架、Collection集合
- 黑马程序员--集合框架(Collection集合)
- 黑马程序员——集合框架之Collection
- 黑马程序员 Java基础之 集合框架(collection)
- 黑马程序员———集合框架之Collection接口
- 黑马程序员 Java面向对象——集合框架总结
- 黑马程序员--Java面向对象——集合框架总结
- 黑马程序员五、集合框架Collection
- 黑马程序员_集合框架 Collection
- 黑马程序员——集合框架-Collection
- phpunit -assert系列函数
- oracle11g R2 RAC 卸载 grid
- iOS基础之深复制与浅复制
- 代码大全2_6——可以工作的类
- linux下使用静态库需要注意的几个问题
- 黑马程序员--面向对象之七:Collection集合框架
- C++中const型数据的小结
- 推荐python主要模块学习
- phpunit使用(项目中)
- XP搜索功能不能使用解决办法
- apache编译常见问题
- 我们来谈谈Unity3D 优化
- Linux 从源码编译安装 OpenSSL
- MD5加密算法