java集合
来源:互联网 发布:怎么删除mac上的文件 编辑:程序博客网 时间:2024/06/06 19:46
集合框架
集合框架的组成及分类。
集合中会有很多已知实现类,如:ArrayList,HashMap等。为什么会有这么多的类,因为每个类对数据的存储方式不同。存储方式也称为:数据结构。
集合中存储的都是对象的引用(地址)。
Collection接口
一.概述
Collection表示一组对象,这些对象也成为Collection的对象。一些Collection允许有相同的元素,另外一些不允许有相同的元素。一些Collection是有序的,而另外一些是无序的。JDK不提供次接口的任何直接实现,它提供更具体的子接口(如Set,List)实现。
Collection接口
|-List 子接口,元素是有序的,元素可以重复,该集合体系有索引。
|-Set 子接口,元素是无序的,元素不可以重复,该集合体系没有索引。
二.共性方法:
1.添加元素 boolean add(Object obj);
2.删除元素 boolean remove(Object obj);//删除指定元素void
clear();//移除所有元素3.判断元素 boolean contains(Object obj);//判断是否包含obj
boolean isEmpty();//判断是否为空
4.获取长度 int size();//集合中的元素数。
5.取交集元素 boolean retainAll(obj);
三.迭代器:
1.概述:
迭代器就是集合取出元素的方式。 把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素。取出方式就被定义成了内部类。但是每一个容器的数据结构不同,所以取出的方式也不同,取出的动作细节也不同,但是有共性内容判断和取出,将共性内容抽取。所以这些内部类都符合一些规则,这个规则就是迭代器(Iterator)。如何获取集合的取出对象呢?通过一个对外提供的方法:iterator()。
2.方法:hasNext();//判断是否有下一个元素
next();//返回下一个元素
remove();//删除元素
List接口
一.概述
有序的Collection。此接口可以对列表中元素的位置精确定位,用户可以根据索引定位元素。 List集合有索引,所以可以操作角标的方法都是List特有方法。
List接口 元素是有序的,元素可以重复,该集合体系有索引。
|-ArrayList 底层的数据结构使用的是数组结构。特点是:查询速度快,增删稍慢,线程不同步。
|-LinkedList 底层的数据结构使用的是链表数据结构。特点是:增删速度快,查询慢,线程不同步。
|-Vector 底层的数据结构使用的是数组结构。线程同步。效率低,被ArrayList替代。
二.List特有方法
2.删
remove(index);//删除列表中指定位置元素
3.改
set(index,element);
4.查
get(index);
subList(from, to);//包括头,不包括尾
listIterator();//List集合特有的迭代器。
三.ListIterator
List接口提供了特有的迭代器ListIterator。除了允许Iterator接口提供的正常操作外,该迭代器还允许元素插入和替换。
ListIterator特有方法:
add();//添加元素
set();//替换元素
remove();//移除元素
四.LinkedList
特有方法:
1.增
addFirst();将指定元素插入到列表的开头
addLast();将指定元素插入到列表的结尾
2.获取
getFirst();获取列表的第一个元素,如果列表中没有元素,会出现NoSuchElementException异常
getLast();获取列表的最后一个元素,如果列表中没有元素,会出现NoSuchElementException异常
3.删
removeFirst();移除并返回第一个元素,如果列表中没有元素,会出现NoSuchElementException异常
removeLast();移除并返回最后一个元素,如果列表中没有元素,会出现NoSuchElementException异常
JDK1.6出现替代方法:
1.增
offerFirst();
offerLasr();
2.获取
peekFirst();获取列表的第一个元素,如果列表中没有元素,会返回null
peekLast();获取列表的最后一个元素,如果列表中没有元素,会返回null
3.删
pollFirst();移除并返回第一个元素,如果列表中没有元素,会出现返回null
pollLast();移除并返回最后一个元素,如果列表中没有元素,会出现返回null
LinkedList 示例:
ArrayList 示例:
Set接口
一.概述
|-HashSet 底层数据结构是哈希表。HashSet通过hashCode和equals这两个方法保证元素唯一性的。
|-TreeSet 底层数据结构是二叉树。TreeSet通过compareTo方法保证元素唯一性的。
二.HashSet
通过元素的两个方法hashCode()和equals()来完成的,如果元素的hashCode的值相同,才会判断equals是否为true。如果元素的hashCode的值不同,就不会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的是hashCode()和equals()方法。
示例:
三.TreeSet
底层的数据结构是二叉树。 TreeSet有两种排序方式,第一种是自然排序,使用元素的自然顺序对元素进行排序。第二种是比较器排序,根据创建对象时提供的Comparator排序。线程是不同步的。注意:当主要条件相同时,在比较次要条件。两种方式都存在时,以比较器为主。
元素需要实现Comparable接口,覆盖compareTo方法,这种方法也称为:元素的自然比较,或者默认顺序。
示例:
2.TreeSet排序的第二种方式:当元素自身不具备比较性时,或者是具备的比较性不是所需要的时,这时需要让集合具备比较性。
定义了比较器,将比较器对象作为参数传到TreeSet集合构造函数中。定义一个类,实现Comparator接口,覆盖compare方法。
示例:
Map接口
一.概述
|-HashMap 底层是哈希表数据结构,不可存入null键null值,线程是同步的。不安全一般不用。
|-HashTable 底层是哈希表数据结构,允许存入null键null值,线程是不同步的。效率高。
|-TreeMap 底层是二叉树数据结构,线程是不同步的,可以用于给Map集合中的键排序。
什么时候使用Map集合?
当数据之间存在映射关系,就要想到Map集合。
二.Map集合的常用方
1.添加put(key,value);//如果出现添加相同的键,后添加的值会覆盖原有的键以及对应的值,并且put方法会返回被覆盖的值。
putAll(Map<? extends K ,? extends V> m);
2.删除
remove(key);//删除指定键以及对应的值
isEmpty();//判断是否为空
4.获取
entrySet(); //Map两种取出方式
ketSet();
三.Map集合的两种取出方式
Map集合取出原理:先将Map集合转成Set集合,再通过迭代器取出
将Map集合中所有的键存到Set集合中,因为Set集合具备迭代器,取出Set集合中的键,通过Map集合的get(key)方法获取键对应的值。
示例:
2 .Set<Map.Entry<k,v>> entrySet
将Map集合中所有的键存到Set集合中,取出Set集合中的键,键的数据类型是Map.Entry。通过Map集合的gatValue()和getKey()方法获取值。
综合示例:
四.Map应用
1. 示例:2.示例
其他
Collections:用于操作集合的工具类
Arrays:用于操作数组的工具类
static <T> List <T> aslist() 将数组变成集合
把数组变成集合有什么好处?
可以使用集合的思想和方法操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删操作,因为数组是固定长度的。
如果数组中的元素是对象,那么变成集合时,数组中的元素就直接转成集合中的元素。如果数组中的元素是基本数据类型,变成集合时,数组就作为集合的元素存在。
集合变数组
指定类型的数组长度到底要定义多长呢?
当指定类型的数组长度小于集合的size时,该方法内部会自动创建一个新的数组,长度为集合的size。当指定类型的数组长度大于集合的size是,不会创建数组了,使用传递进来的数组。所以要创建一个刚刚好的数组最优。
为什么将集合变成数组?
为了限定对元素的操作,不能进行增删了。
- Java集合:集合框架
- java集合---set集合
- JAVA 集合 的 集合
- 【集合】Java集合对比
- JAVA集合-Map集合
- JAVA集合-Set集合
- JAVA集合-List集合
- java集合------Map集合
- Java集合----List集合
- Java集合----Set集合
- Java集合----Map集合
- JAVA集合
- JAVA集合
- Java集合
- JAVA集合
- Java集合
- Java集合
- java 集合
- 史上最详细的Android Studio系列教程四--Gradle基础
- Spell checker(POJ--1035
- uploadify3.2.1+struts2实现多文件上传
- 美团Android自动化之旅—适配渠道包
- BasicResponseHandler
- java集合
- 软工视频——第三章
- 浅谈Struts2登录拦截器
- Oracle无法操作只能查询:record is locked by another user
- Ubutun 14.0.1+php5+Mysql+Nginx配置:
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- 判断android webView访问url的状态
- ios Label常用方法
- SDK插件安全分析