5分钟搞定java集合框架

5分钟搞定java集合框架

java集合就是一个容器。

  1. 集合概述
    

l 为了保存 不确定的数据,或者对象,以及保存具有 映射关系的数据。
l 所有的集合类 都位于java.util包下。
1.1. 什么是集合,有什么特点?

  1. 面向对象语言对事物的体现都是以对象的形式存在,所以为了方便对多个对象的操作,
    就对对象进行存储, 集合就是 存储对象最常用的一种方式。
    2.集合 只用于存储对象,集合长度是可变的,集合可以存储 不同类型的对象。
    1.2. 集合与数组的区别(集合特点)
    .首先我们要知道集合与数组是不同:
  2. 集合是可变长度的,集合中用size();
    而数组是 固定长度的, 数组中是用length();
  3. 集合是用来放 对象的, 数组可以存储基本数据 也可以存储 引用数据类型;
  4. 有一点需要注意下,如果集合存放基本数据类型,在存取过程中会有个自动装箱和拆箱
    集合可以放任意对象(引用嘛), 但是数组只能放 相同的数据类型;
    对于如何使用集合,我们先看顶层的方法,然后去调用底层的子类来实现具体的功能。
    1.3. 集合框架
    由于集合内部的数据结构不同,集合分为多种容器。这些容器不断的向上抽取,形成了集合框架。
    Collection
    |----------List(有序,,元素都有索引(角标),元素可以重复)
    |--------Vector:基于数组实现,同步, 线程安全。 增删,查询都慢。
    |--------ArrayList:基于数组实现,不同步, 线程不安全, 需要手动同步, 查询的速度快
    |--------LinkedList: 基于链表实现,不同步,线程不安全,需要手动同步, 增删都很快
    |----------Set (无序,元素不可以重复)
    |--------HsahSet: 基于哈希表实现,不同步的。
    |--------LinkedHsahSet
    |--------TreeSet: 基于二叉树实现,不同步的。 自然排序,定制排序

Map集合(键值对)
|----------TreeMap 基于二叉树,可以排序
|----------HashMap 哈希表实现

Iterator迭代器
|----------Collection 每个集合都有迭代器
|----------ListIterator 主要用于List集合迭代,迭代过程可以操作元素
1.4. 集合常见方法
Collection的常见方法:
1,添加:
boolean add(Object obj): //添加元素
booleanaddAll(Collectioncoll): //添加给定集合到 当前集合
2,删除:
boolean remove(object obj): //删除元素
booleanremoveAll(Collectioncoll);
void clear(); //清空集合
3,判断:
boolean contains(object obj): //是否包含指定元素
booleancontainsAll(Colllectioncoll); //是否包含给定集合
booleanisEmpty(): //判断集合中是否有元素。
4,获取:
int size():
Iterator iterator(): 取出元素的方式:迭代器。
5,其他:
booleanretainAll(Collection coll); 取交集。
Object[] toArray(): 将集合转成数组。
1.5.遍历集合:
迭代器 Iterator:
也是集合框架的成员,但它主要用于遍历集合中的对象,封装了各种集合的底层细节,
给集合框架提供了统一的接口。 比如,这里举个例子。主要有3个方法:
booleanhashnext(); 如果仍有元素可以迭代,则返回true
E next() 返回迭代的下一个元素
void remove() 移除迭代器返回的最后一个元素

而对于map类集合有2中方式来遍历:

  1. keySet()
    获取键对应的Set集合,然后在用Iterator配合get(Object key)获取每一个键所对应的值。
    2.entrySet()
    获取键值对集合,存入Map.Entry<K,V>集合中,Iterator对其进行迭代,
    再用getKey()取出键,getValue()取出值。
    1.6. 集合的一些技巧:
    一.需要唯一吗?
    需要:Set
    需要制定顺序:
    需要:TreeSet
    不需要:HashSet
    但是想要一个和存储一致的顺序(有序):LinkedHashSet
    不需要:List
    需要频繁增删吗?
    需要:LinkedList
    不需要:ArrayList

l 看到array: 就要想到数组,就要想到 查询快,有角标.
l 看到link: 就要想到链表, 增删快, add get remove+frist last的方法
l 看到hash: 就要想到哈希表,唯一性,元素需要 覆盖hashcode方法和equals方法。
l 看到tree: 就要想到二叉树,就要想要排序,就要想到两个接口Comparable,Comparator 。

  1.   List集合
    

l 有序(存入和取出的顺序一致), 元素都有索引(角标),元素可以重复。
l 对于List, 根据其内部结构不同又分为Arraylist、LinkedList、Vector
l 共性特点:可以操作 角标
2.1.List子系
List:
Vector: 数组数据结构, 是同步的。增删,查询都很慢! 已经ArrayList替代
ArrayList: 数组数据结构, 是不同步的。。 查询的速很度快。
LinkedList: 链表数据结构, 是不同步的。 增删的速度很快。

2.2.List常用共性方法
1添加元素:
Void add(intindex, Eelement); //指定位置插入元素
void add(index,collection); //将给定的集合添加到末尾
2删除元素:
Object remove (index): //删除指定交表的元素,返被背删除的
3修改元素:
Object set (intindex, Eelement); //用指定元素替换列表中指定位置的元素4获取元素:
Object get(index); //返回列表中指定位置的元素
Int indexOf(object); //返回此列表中第一次出现的指定元素的索引, 没有返回-1
Int lastIndexOf(object); //返回此列表中最后一次出现的指定元素的索引,没有返回-1
List subList(intfrom, intto); //获取子集包含头不包含尾。

  1.   Set集合
    

Set集合与Collection基本上一样,只不过内部元素是无序的,不允许重复。
Add之前,会判断(equals方法)集合中是否包含此元素,
如果包含返回true 存入集合,
如果不包含,返回false,不存。
1 HashSet:按hash算法来存储集合中的元素,因此具有良好的存取和查找功能。
(1) 特点:
不保证顺序。
不是同步的
集合元素可以是null
(2) 判断元素是否相等
Ø 判断hash值 是否相等
Ø Equals判断内容是否相等
2 TreeSet:按存储集合中的元素的compare或者比较器,来判断是否需添加到集合。
(1) 特点:
自然顺序或指定顺序。
不是同步的
集合元素可以是null
(2) 判断元素是否相等
判断hash值是否相等
Equals判断内容是否相等
3.1.LinkedHashSet的集合特点
HashSet的一个子类,也是根据元素的hash值来判断元素位置,但同时使用链表维护元素次序。
由于需要维护次序,所以性能略低于hashSet,但在迭代访问集合元素时,将有很好的性能。
【有序不许重复】
3.2. 常用共性方法

1:增加元素:
boolean add(Object obj) ; //添加一个元素,在末尾位置
boolean addAll(Collection c); //添加一个集合,在末尾位置
2:删除元素:
boolean remove(Object obj); //删除一个元素。
boolean removeAll(Collection c) //删除包含c的元素。
void clear(); //移除此集合的的所有元素
3:判断元素:
boolean contains(Object obj) //判断是否包含某个元素。
boolean containsAll(Collection c); //在此集合中包含集合c中的所有元素
boolean isEmpty(); //判断是否为空集合。
4:获取元素:
Int size(); //获取size大小。
Iterator iterator(); //迭代器,用于取出元素的。配合it.next()和hasNext()组合使用。
3.3.Hash表确定元素是否相同
1:判断两个原素的hash值是否相同; 如果相同个, 判断两个内容是否相同
2:判断hash值相同,其实是判断hashCode()是否相同, 判断内容用equals()方法。
(一) hashCode规则
1 同一个对象多次 调用返回的hashCode值相等。
2 2个对象euqals方法比较返回true时,他们hashCode也应相等。
3 对象中用作equals方法比较标准的field都应用来计算hashCode值
(二) 重写hashDode规则:
1 把每个对象的有意义的field,计算出一个hashcode值。
2 用第一步计算出来的多个hashCode来组合成一个值返回。
3 为了避免相加产生偶然相等。可以通过hashcode一个质数相加返回。
例如:
Return name.hashCode
11 + age.hashCode*7;

练习:请定义ArryaList集合,并存储Person对象。
如newPerson("lisi",20);并取出。将姓名和年龄打印出来。
3.4.TreeeSet排序的2种方式
1, 让对象本身具备可比性。 实现comparable接口的comparTo()方法。
2, 创建比较器。
比较器实现Compartor接口,Compar()方法作为TreeSet对象的构造参数象传入。注意泛型。
3, 建议用第二种,使用灵活
· publicstaticvoid main(String[] args) {
TreeSet <Person>ts= newTreeSet<Person>( new Comparator<Person>() {
publicint compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});
ts.add(new Person("mike",28));
ts.add(new Person("lisi",21));
ts.add(new Person("zhouqi",29));
ts.add(new Person("zhaoliu",25));
ts.add(new Person("wangu",24));
for (Object o: ts) {
Person p = (Person) o;
System.out.println(p.getName() +"\t" + p.getAge());
}
}
3.5. 选择HashSet还是TreeSet?
1.HashSet的性能总是比TreeSet好,(主要表现在添加、删除、查询等),
因为TreeSet需要二外的红黑树来维护次序。 只有当需要排序时才使用TreeSet。
2.HashSet有一个子类,
LinkedSet对于普通测插入删除这个要比HashSet要慢些。 因为要维护链表。
3.6. 安全问题解决
通常在创建是就调用Collections工具类的synchronizedSortedSet方法来 包装集合。
例如
Sorted s =new Collections.synchronizedSortedSet(new Treeset(…))

  1.   Map集合
    

Map集合用于存储那些有映射关系的数据;
Map也成为双列集合。
Map存的是一对元素:一个Key,一个Value。Key、Value可以使任何引用类型的数据。
其中Map的Key不允许重复。
4.1.Map集合子体系
Map:
HashMap:哈希表结构;Key唯一;不同步;允许null作为键,值。
hashCode()、equals()确定唯一
HashTable:哈希表结构;数据唯一;同步低效的。不允许null作为键,null作为值。
TreeMap:二叉树结构;Key唯一;可排序;不同步但高效;允许null作为键,null作为值。
4.2.Map常用方法
1添加元素:
·value put(key,value): 返回前一个和key关联的值,如果没有返回null.
2,删除元素。
void clear(): 清空集合。
value remove(key): 根据指定的key翻出这个键值对。
3,判断元素。
boolean containsKey(key): 判断是否包含给定的key
boolean containsValue(value):判断是否包含给定的value
boolean isEmpty(); 判断集合是否为空
4获取元素。
value get(key): 通过键获取值,如果没有该键返回null。可以用来来判断是否包含指定键。
int size(): 获取键值对的个数。
4.3.Collection和Collections
collection是集合框架的顶层接口,集成一些集合的共性方法;添加、删除、修改、查询、判断等。下分为list和set两个分支,其又各自有体系,
list有序,可以重复的,有分为vector arraylis tlinkedlist(各个数据结构,特点)
set 无序不许重复的,有分为。 hashset和 treeset(各个数据结构,特点)

Collections是一个对collection操作的工具类,提供的都是静态方法(查找,排序,反转,加锁)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX阅读 869评论 0 1
  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 715评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 集合类简介 为什么出现集合类?面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就要对对象进...
    阿敏其人阅读 1,401评论 0 7
  • Java 集合类是一种特别有用的工具类,大致可分为Set、List、Queue、Map四种体系。 Set代表无序、...
    ifeelok0319阅读 281评论 0 0