Java集合概述
容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用。要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系
String str = new String("song");
右边的“new ”,是创建一个String类对象
()指在对象创建后,调用构造函数,初始化对象。
左边的“String str”创建了一个String类引用变量str。
“=”使对象引用指向刚创建的String对象
集合是保存其他对象的对象,集合是一种存储机制,可以添加,删除元素以及访问,更新元素的值
Collection
Java集合中的Collection接口是集合框架最基础的接口,Collection接口描述了集合中的主要操作,集合类型不直接实现Collection接口,Collection的直接“子接口”有Set,List,Queue等接口。
下图是Java容器中接口或类之间的继承和实现关系

继承至该接口的方法有
| 方法名 | 说明 |
|---|---|
boolean add(E e) |
确保此 collection 包含指定的元素(可选操作)。 |
boolean addAll(Collection<? extends E> c) |
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 |
void clear() |
移除此 collection 中的所有元素(可选操作)。 |
boolean contains(Object o) |
如果此 collection 包含指定的元素,则返回 true。 |
boolean containsAll(Collection<?> c) |
如果此 collection 包含指定 collection 中的所有元素,则返回 true。 |
boolean equals(Object o) |
比较此 collection 与指定对象是否相等。 |
int hashCode() |
返回此 collection 的哈希码值。 |
boolean isEmpty() |
如果此 collection 不包含元素,则返回 true。 |
Iterator<E> iterator() |
返回在此 collection 的元素上进行迭代的迭代器。 |
boolean remove(Object o) |
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 |
boolean removeAll(Collection<?> c) |
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 |
boolean retainAll(Collection<?> c) |
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 |
int size() |
返回此 collection 中的元素数。 |
Object[] toArray() |
返回包含此 collection 中所有元素的数组。 |
<T> T[] toArray(T[] a) |
返回包含此 collection中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 |
Set
Set集合不允许重复值,集操作包括并集、交集和差集操作。
- Set:无序、不包含重复元素
- HashSet(散列函数):外部无序地遍历成员
- LinkedHashSet:外部按成员的插入顺序遍历成员
- TreeSet(红黑树):外部有序地遍历成员,并实现了SortedSet,支持子集等要求顺序的操作
- HashSet(散列函数):外部无序地遍历成员
List
List集合类型是描述按位置顺序存储元素的对象,同时它还包括基于索引的操作。
- List:元素有序、可重复、有对应的顺序索引
- LinkedList:可以在任何位置进行插入和移除操作的有序序列
- ArrayList(主要实现类,不同步):可以动态增长和缩减的索引序列
- (Vector(古老的实现类,同步))
ArrayList集合是一种在内存连续区域中存储元素的通用数组,底层的存储结构是一个允许直接访问元素的数组。(ArrayList取代Vector。Vector是同步的,而ArrayList不是同步的)
- ArrayList集合是一种能够直接访问的集合
- ArrayList集合是能够在尾部插入和删除元素的通用数组
LinkedList是一个序列,该序列的值有一个值以及标识序列中相邻元素的链接
- LinkedList集合的访问必须从列表头开始,按照链接前进到达所要求的值,是一种顺序访问的结构
- 在LinkedList中插入或删除元素涉及链中的链接,这些都是O(1)操作
(ListIterator子接口包含add方法,可以从前后两个方向遍历链表中的元素,并可以添加删除元素previous()和hasPrevious方法)
Queue
Queue是典型的先进先出容器
队列(queue)是一种只允许在头部和尾部进行访问的集合,从尾部进入,从头部退出(FIFO)
(由于LinkedList即实现了List接口又实现了Queue接口。所以该类支持队列的行为)
PriorityQueue
优先队列(priority queue)中,元素以任何顺序进入优先队列结构,但是必须按照一定规则的优先顺序被删除。
Map
Map是一种存储键值对的集合,键值可以是任意的对象类型,键唯一标识了元素,而值字段通常具有相关联的信息,访问某个元素只要求键参数,并返回值组件。
- Map:将对象映射到其他对象所形成的键值对容器,允许使用键来查找值
- HashMap:能满足用户对Map的通用需求
- LinkedHashMap:可以记住键值项被添加顺序的Map集合
- SortedMap
-TreeMap:键有序的Map集合,并实现了SortedMap,支持子Map等要求顺序的操作
-EnumMap :键属于枚举类型的Map集合
- HashMap:能满足用户对Map的通用需求
迭代器
Iterator接口具有下面三个方法
public interface Iterator<E>{
E next();
Boolean hasNext();
void remove();
}
迭代器的工作是通过反复调用next方法遍历序列中的元素,其用法主要有一下几个步骤:
Collection<String> c = ArrayList()<String>;
Iterator<String> it = c.iterator();
while(it.hasNext()){
String element = it.next();
System.out.println(element);
it.remove();
- 使用方法iterator()要求容器返回一个Iterator。
- 使用next()获取序列的下一个元素。
- 使用hasNext()检查序列中是否还有元素。
- 使用remove()删除元素。
(ListIterators是实现双向遍历,并且可以修改单元的列表)
从JavaSE5.0起引入Foreach语句,对于标准类中的任何集合都可以使用Foreach语句
for(String element c){
System.out.println(c);
}
也可应用于Collection对象,语法规则是
Foreach与Iterator
对于上述两者有一个示例:
import java.util.*;
public class IteratorTest {
public static void main(String[] args){
List<Integer> c =new ArrayList<Integer>();
for(int i=0;i<10;i++)
c.add(i);//自动装箱
Integer[] moreInts = {10,11,12,13};
c.addAll(Arrays.asList(moreInts));
for(Integer i : c)
System.out.print(i+ ",");
System.out.println();
Iterator it = c.iterator();
while(it.hasNext()){
it.next();
it.remove();
}
System.out.print(c);
}
}
对象的比较
Comparable和 Comparator
Comparable接口定义了一个方法
public interface Comparable<T>
{
int conpareTo(T other);
}
使用COmparable接口序列排序有局限性,如果一个集合中的元素需要按照要求A排序,而另一集合却要按照要求B排序
Comparator接口定义了带有两个显示参数的compare方法
public interface Comparator
{
int compare(T a ,T b)
]
Comparable和 Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序
Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。,该对象列表或数组可以通过Collections.sort(或Arrays.sort)进行排序。Comparable接口只提供了int compareTo(T o)方法
Comparator 是比较器接口。让对象(数组)实现比较的功能,可以通过“实现Comparator类来新建一个比较器”,然后通过该比较器对类进行排序。Comparator 接口提供额int compare(T o1,T o2)和 boolean equal(Object obj)方法
集合与数组的转换
数组转换成集合
Arrays.asList的包装器可以实现
String values[] =
HashSet staff = new HashSet<Arrays.asList(values)>;
集合转换成数组
可以使用toArray方法
Object[] values =staff.toArray;
返回的是对象数组
HashMap原理
其他记录
List phones = new ArrayList<>();
使用接口的目的是在于修改实现时,只需要在创建处去修改它
List phones = new LinkedList<>();
Java集合概述的更多相关文章
- 《java集合概述》
JAVA集合概述: Collection: |---List有序的:通过索引就可以精确的操作集合中的元素.元素是可以重复的. List提供了增删改查的动作. 增加add(element) add(in ...
- Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)
Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...
- Java笔记:Java集合概述和Set集合
本文主要是Java集合的概述和Set集合 1.Java集合概述 1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组 ...
- 第8章-Java集合 --- 概述
第8章-Java集合 --- 概述 (1)Java集合类是一种特别有用的工具类,可以用于存储数量不等的多个对象,并可以实现常用的数据结构,如 栈.队列等. (2)Java集合大致可分为Set.List ...
- Java集合--概述
目录 Java集合--概述 摘要 图示 正文 Java集合--概述 摘要 本文主要介绍集合的整体概念,并作为接下来Java集合实现类讲解的索引. 图示 这是在网上看到了这样一张图,感觉很清晰, ...
- Java集合----概述、Collection接口、Iterator接口
Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中. Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组 Java 集合可分为 Set.Li ...
- Java集合——概述
Java集合——概述 摘要:本文主要介绍了几种集合类型以及有关的一些知识点. 集合类图 类图 类图说明 所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collecti ...
- Java集合概述(上)
Java集合概述(上) 前言 先说说,为什么要写这么一篇博客(我总是喜欢写原因).因为最近到年底了,正好又要准备面试,所以在做各方面的技术总结.而Java集合是Java非常重要的一部分,自己前前后后也 ...
- 1.Java集合总结系列:Java集合概述
一.概述 集合是 Java 中非常重要的 API,在实际应用中非常广泛,在许多面试中也是必考的知识点. Java 所有集合类都位于 java.util 包下,Java 的集合只能保存对象,而无法保存保 ...
- Java集合(一):Java集合概述
注:本文基于JDK 1.7 1 概述 Java提供了一个丰富的集合框架,这个集合框架包括了很多接口.虚拟类和实现类. 这些接口和类提供了丰富的功能.可以满足主要的聚合需求. 下图就是这个框架的总体结构 ...
随机推荐
- 《JavaScript语言精粹》—— 读书总结
话说这本书还是同学的推荐才读的,之前感觉这本书太薄了,不值得看,没想到小身材有大智慧,书中的内容总结的还是很到位的!所以就把最后几章,精华的部分整理整理. 优美的特性 函数是顶级对象 在JS中,没有块 ...
- Android开发学习之路-SnackBar使用心得
SnackBar是DesignSupportLibrary中的一个重要的控件,用于在界面下面提示一些关键信息,跟Toast不同的地方是SnackBar允许用户向右滑动消除它,同时,也允许在SnackB ...
- VB中 '&' 和 '+' 号的区别
释义 &(Ampersand)是英语单字and之代表符号,亦可用作中文中的“和”.“与”之代表符号.这个符号源于拉丁文的et的连写. 可读做 ampersand,即 "and per ...
- 修改HTML5 input placeholder 颜色及修改失效的解决办法
input::input-placeholder{color: #bdbdbd ;} /* 有些资料显示需要写,有些显示不需要,但是在编辑器webstorm中该属性不被识别 */ ::-webkit- ...
- Adobe Photoshop CC 打开时报错~配置错误:请卸载并重新安装该产品
后期会在博客首发更新:http://dnt.dkill.net 异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html 个人估计,要么安 ...
- ajax局部刷新后,如何让局部中的百度分享重新加载
我这个人不怎么喜欢说太多话,看几个图你们就懂了 Ajax前 Ajax之后 原因分析 解决方法 收工 百度分享是集成了众多主流第三方网站分享和收藏按钮的工具. 通过百度分享轻松将主流第三方网站的分享按钮 ...
- 【Win 10应用开发】Adaptive磁贴模板的XML文档结构
在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...
- 解决adb.exe' and can be executed.
百度google大家多说的是任务管理器 kill掉adb 或者重启adb server,但我任务管理器就没有adb ,猜测是某个程序占用了adb端口.于是按此思路查找. 5037为adb默认端口 查看 ...
- 前端学PHP之错误处理
× 目录 [1]错误报告 [2]错误级别 [3]错误处理[4]自定义错误[5]错误日志[6]异常处理[7]自定义异常 前面的话 错误处理对于程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取 ...
- ASP.NET Core的配置(1):读取配置信息
提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...