JAVA中的集合容器操作类
JAVA中的集合容器操作类
Java容器类库总共分为两个概念:
- Collection。标识所含元素的序列,这里面又包含多种集合类,比如List,Set,Queue;它们都有各自的特点,比如List是按顺序插入元素,Set是不重复元素集合,Queue则是典型的FIFO结构
- Map。这是一个“键值对”的集合对象,允许你通过键来查找值。把你的键对象与值对象关联,映射起来;而Map又细分很多中集合,比如HashMap,TreeMap这其中的实现的数据结构又有所不同,所以其使用的功能场景也有所不同
List集合
List是可以将元素维护在特定的序列中的集合。List继承自Collection类,并添加了属于自己大量的操作方法。具体有两种类型的List:
- ArrayList:由名字就可以看出是数组形式的数据结构,所以查询访问元素非常快(索引查询),但是添加或者删除元素时慢
- LinkedList:链表形式的数据结构,即查询是很慢(时间复杂度为O(n)),新增,删除数据是很快的
ArrayList的操作方法说明
注意:这里讨论的集合都是泛型集合
subList(int fromIndex,int toIndex)
由原来的list构造从索引为fromIndex到toIndex之间的数据集合(包含fromIndex,toIndex)set(int index,T element)
在指定的index位置出用指定元素element代替addAll(collection<? extends E> c)
除了Collection.addAll,实例方法addAll也能在初始list中插入集合列表add()
集合类中最常用的添加数据的方法toArray()
创建一个具有合适尺寸的数组- ...
LinkedList
LinkedList也跟ArrayList一样实现了List接口,前面说了,它在删除和添加操作时(准确的讲是在中间插入)要比ArrayList更高效,但是访问要逊色于ArrayList。LinkedList还添加了使其用作栈、队列或双向链表的方法。他们彼此的方法也存在些许差异,所以在不同的List类型中用不同的方法操作集合是非常重要的。
getFirst和element方法完全一样,都返回列表的头,而不移除它,如果List为空则抛出异常—NoSuchElementException。peek方法同样是返回列表的头并不移除它,但是List为空则返回null而不会抛出异常
这有点像C#的Linq.FirstOrDefault与Linq.First的区别
removeFirst与remove也是完全一样的,它们移除并返回列表的头部信息,而在列表为空是抛出NoSuchElementException异常。poll则列表为空是返回null
addFirst与add和addLast相同,都将元素插入到列表尾部或头部
removeLast移除并返回列表的最后一个元素
Stack
栈,是指“LIFO”先进后出的集合容器,最后一个压入的元素是第一个出来的,就好比我们洗碗一样(或者叠罗汉)第一个摆放的碗放在最下面,自然是最后一个拿出来的。Stack是由LinkedList实现的,作为Stack的实现,下面是《java编程思想》给出基本的Stack实现:
import java.util.LinkedList;
public class Stack<T> {
private LinkedList<T> storage = new LinkedList<>();
public void push(T v) {
storage.addFirst(v);
}
public T peek() {
return storage.getFirst();
}
public T pop() {
return storage.removeFirst();
}
public boolean empty() {
return storage.isEmpty();
}
public String toString() {
return storage.toString();
}
}
下面说一些方法的区别
peek和pop是返回T类型的对象。peek方法提供栈顶元素,但不删除栈顶,而pop是返回并删除栈顶元素;
Set
Set是保存不重复的集合容器,Set经常被用作判断某元素是否在集合中存在,所以查找就成为最重要的操作,在内部,Set选择一个HashSet的实现,它专门对快速查找进行了优化。
Set具有与Collection完全一样的接口,没有额外的任何功能。所以把Set就是Collection,只是行为不同(这就是多态);Set是基于对象的值来判断归属的,由于查询速度非常快速,HashSet使用了散列,HashSet维护的顺序与TreeSet或LinkedHashSet都不同,因为它们的数据结构都不同,元素存储方式自然也不同。TreeSet的数据结构是“红-黑树”,HashSet是散列函数,LinkedHashSet也用了散列函数;
如果想要对结果进行排序,那么选择TreeSet代替HashSet是个不错的选择
Map
Map具有将对象映射到其他对象的功能,是一个K-V形式存储容器,你可以通过containsKey()和containsValue()来判断集合是否包含某个减或某个值。Map可以很容以拓展到多维(值可以是其他容器甚至是其他Map):
Map<Object,List<Object>>
学C#的就知道,这就像字典基一样Dictionary<K,V>
Queue
队列与栈相反,是个先进先出“FIFO”的容器。即第一个放进去就是第一个拿出来的元素(从一端进去,从另一端出来)。队列常作被当作一个可靠的将对象从程序的某个区域传输到另一个区域的途径。
LinkedList提供了方法以支持队列的行为,并且实现了Queue接口。通过LinkedList向上转型(up cast)为Queue,看Queue的实现就知道相对于LinkedList,Queue添加了element、offer、peek、poll、remove方法
offer:在允许的情况下,将一个元素插入到队尾,或者返回false
peek,element:在不移除的情况下返回队头,peek在队列为空返回null,element抛异常NoSuchElementException
poll,remove:移除并返回队头,poll当队列为空是返回null,remove抛出NoSuchElementException异常
注意:queue.offer在自动包装机制会自动的把random.nextInt转化程Integer,把char转化成Character
总结
Java内置了大量容器操作对象:
- 数组,将数组与对象结合起来,数组一旦生成,容量就不允许修改
- Collection保存单一的元素,Map保存的是K-V键值对形式的元素对象,可以在集合中添加元素并自动调整尺寸。容器不能持有基本类型,但是自动包装机制会执行基本类型到容器中所持有的类型之间的转换
- List类似与数组,简历数字索引与对象的关联,都是排序好的容器,List能自动扩容
- ArrayList擅长随机访问,要插入删除元素,LinkedList合适
- Queue是LinkedList实现的
- Map对象映射对象的关联设计。HashMap主要用来快速访问;TreeMap保持“键”始终处于排序状态,没有HashMap快。LinkedHashSet保持元素插入的顺序,但通过散列函数提供了快速访问的能力
- Set可以用来去重,能提供最快的查询速度
Java还在处于初学阶段,还有很多知识面都还没有涉及到,等学到后面,又有新启发了,回过头来在补充
JAVA中的集合容器操作类的更多相关文章
- Java中各种集合(字符串类)的线程安全性!!!
Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...
- Java中的集合和常用类
Java中的常用类: ▪ Object类 ▪ Math类 ▪ String类和StringBuffer类(字符串) ▪ 8种基本类型所对应的包装类 ▪ java.util包中的类——Date类 Obj ...
- java中的集合/容器的数据结构
最近双11在网上买了本 数据结构和算法--java语言实现,正在啃,同时在慕课网上的学习进度来到了集合框架这一类,对于这一块算是刚刚了解,本科的时候数据结构学习的是严蔚敏老师的那本数据结构,代码的实现 ...
- Java中的集合Collections工具类(六)
操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集 ...
- java中的集合操作类(未完待续)
申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...
- Java中的集合(十四) Map的实现类LinkedHashMap
Java中的集合(十四) Map的实现类LinkedHashMap 一.LinkedHashMap的简介 LinkedHashMap是Map接口的实现类,继承了HashMap,它通过重写父类相关的方法 ...
- Java中的集合框架
概念与作用 集合概念 现实生活中:很多事物凑在一起 数学中的集合:具有共同属性的事物的总体 java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象 在编程时,常常需要集中存放多 ...
- Java中的集合框架(上)
Java中的集合框架概述 集合的概念: Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象. 集合的作用: 1.在类的内部,对数据进行组织: 2.简单的快速的搜索大数据量的 ...
- Java中的集合框架-Collections和Arrays
上一篇<Java中的集合框架-Map>把集合框架中的键值对容器Map中常用的知识记录了一下,本节记录一下集合框架的两个工具类Collections和Arrays 一,Collections ...
随机推荐
- C#属性、自动属性、字段之间的区别和理解
.ctor是构造方法的意思,注意委托其实也是有构造方法的(不过是编译器自动创建的是私有的)貌似它的参数一个是委托引用的方法所属的对象(或Type对象),一个是该方法的指针: 1.属性的概念其实和字段是 ...
- 125 open source Big Data architecture papers for data professionals
https://www.linkedin.com/pulse/100-open-source-big-data-architecture-papers-anil-madan
- Django Template 进阶
回顾: Variables {{ var }} {{ dict.key }} {{ var.attr }} {{ var.method }} {{ varindex }} Filter {{ list ...
- Word中带圈数字
写论文时常常要求输入带圈数字,先在Word中输入代码,选中代码后按Alt+X(然后再粘贴到Excel中) 符号 代码⓪ 24ea① 2460② 2461③ 2462④ 2463⑤ 2464⑥ 2465 ...
- ReactNative学习笔记(四)热更新和增量更新
概括 关于RN的热更新,网上有很多现成方案,但是一般都依赖第三方服务,我所希望的是能够自己管控所有一切,所以只能自己折腾. 热更新的思路 热更新一般都是更新JS和图片,也就是在不重新安装apk的情况下 ...
- tomcat 启动报错org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalin
IDEA tomcat 7.0.53 严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed ...
- Bootstrap轮播如何支持移动端左右滑动
一直觉得bootstrap的轮播用起来很好用,代码简单,又支持响应式,不过从来没想过,也不知道原来bootstrap的轮播竟然不支持在手机上左右滑动 解决方法就是:使用滑动手势js插件:hammer. ...
- interface中定义default方法和static方法
interface的default方法和static方法 接口中可以定义static方法,可通过接口名称.方法名()调用,实现类不能继承static方法: 接口中可以定义default方法,defau ...
- Maven - Tips
1- Maven的Settings http://maven.apache.org/settings.html 2- Maven设置代理 示例: <proxies> <proxy&g ...
- git 服务器搭建及提交代码检查
本地 git 服务,通常都会选择 gitlab.本人最先也是选择 gitlab,在 centos7 上按照官网的步骤进行安装,下载的速度难以忍受,无奈放弃.最终选择在 docker 中安装 gogs ...