Java集合专门用来存放多个对象,方便程序处理数据。Java提供了多种集合类,以便满足不同的应用需求,这些集合类分为两大系列:Collection和Map

  • List

  List的通用方法

boolean  add(Object obj);//添加指定元素
boolean remove(Object obj);//删除指定元素
void clear();//清空元素
int size();//获得元素个数
boolean contains(Object obj);//判断是否包含指定元素
void add(int index, Object obj);//在指定位置添加指定元素
Object remove(int index);//删除指定位置的元素
Object get(int index);//获得指定位置的元素
int indexOf(Object o);//返回指定元素第一次出现的位置

  List的遍历

//使用for循环遍历
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
System.out.println(obj);
} //使用Iterator遍历
Iterator it = list.iterator();
while (it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
} //使用增强for循环遍历
for (Object obj : list) {
System.out.println(obj);
}
  • List的子类ArrayList

  ArrayList内部结构是数组,这就决定了ArrayList在进行相关操作时有以下特点:

  1 元素可重复

  2 元素添加顺序(add(obj))和遍历顺序一致

  3 add时如果需要扩充内部数组容量则会降低程序执行效率

  4 add(index, obj)时index位置及其后面的元素都会往后挪动一个位置,造成效率降低

  5 remove时被删除元素后面的元素都会往前挪动一个位置,造成效率降低

  6 get(index)时可直接定位并返回指定位置的元素,效率很高

  其实当ArrayList元素个数不太多时,效率降低的影响可忽略不计,所以ArrayList仍非常常用

  • List的子类LinkedList

  LinkedList内部结构是链表,这就决定了LinkedList在进行相关操作时有以下特点:

  1 元素可重复

  2 元素添加顺序(add(obj))和遍历顺序一致

  3 add、remove时只需要修改链接,性能很高

  4 get(index)时内部会遍历链表,相对ArrayList的效率稍低一些

  可见,如果元素个数不多,ArrayList和LinkedList各种操作的效率差别可忽略,如果元素个数很多,如果需要频繁进行增删操作,建议使用LinkedList。如果需要频繁执行get(index)操作,建议使用ArrayList

  • Set

  Set的通用方法

boolean  add(Object obj);//添加指定元素
boolean remove(Object obj);//删除指定元素
void clear();// 清空元素
int size() ;// 获得元素个数
boolean contains(Object obj);// 判断是否包含指定元素

  Set的遍历

//使用Iterator遍历
Iterator it = set.iterator();
while (it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
} //使用增强for循环遍历
for (Object obj : set) {
System.out.println(obj);
}
  • Set的子类HashSet

  HashSet内部借助HashMap实现,其实是哈希表结构,这就决定了HashSet在进行相关操作时有以下特点:

  1 元素不可重复

  2 不支持索引操作

  3 元素添加顺序和遍历顺序不一致

  4 add、remove的效率和LinkedList基本一样

  5 get的效率比LinkedList高(所用时间大概为Linked的1/16)

  可见,无论何种操作,HashSet的效率都很不错

  • Set的子类LinkedHashSet

  LinkedHashSet是在HashSet的基础上增加了链表结构,这样就可以让元素添加顺序和遍历顺序一致,其他操作特点和HashSet一样

  • Set的子类TreeSet

  TreeSet内部借助TreeMap实现,其实是二叉树结构,这就决定了TreeSet在进行相关操作时有以下特点:

  1 元素不可重复

  2 不支持索引操作

  3 元素添加顺序和遍历顺序不一致,遍历时元素按自然顺序排序

  4 add、remove的效率高

  5 get的效率也高

  可见,无论何种操作,TreeSet的效率都很不错

  • Collection的其他子类

  Stack

  通过对List的封装定义了一组方法,用来实现先进后出的操作特点

Stack stack = new Stack();
stack.push(obj);//把指定对象放在栈顶
stack.pop();//删除并返回栈顶元素
stack.peek();//获得栈顶元素

  Queue

  queue是个接口,定义了一组方法,用来实现先进后出的操作特点,LinkedList就是Queue的实现类

Queue queue = new LinkedList();
queue.offer(obj); //把元素添加到队尾,等同于add(obj)
queue.poll(); //删除并返回队首元素
queue.peek(); //返回队首元素
  • Map

  Map的通用方法

Object  put(Object key,Object value);//把键值对添加到map中
Object get(Object key) ;//根据key获取value
Object remove(Object key);//根据key删除键值对
void clear();//清空map中的键值对
void size() ;//返回map中键值对的个数

  Map的遍历

//遍历key Set
Set keys = map.keySet();
for (Object key : keys) {
Object value = map.get(key);
System.out.println(value);
} //遍历value Collection
Collection values = map.values();
for (Object value : values) {
System.out.println(value);
} //遍历Entry Set
Set<Entry> entries = map.entrySet();
for (Entry entry : entries) {
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println(value);
}
  • Map的子类HashMap

  HashMap内部是哈希表,其实就是数组和链表的组合形式

  HashMap操作key时和HashSet非常相似(HashSet内部就是HashMap实现的)

  1 key不可重复

  2 key不支持索引操作

  3 key的添加顺序和遍历顺序不一致

  4 增、删、查操作效率和HashSet一样都很高

  • Map的子类LinkedHashMap

  LinkedHashMap是在HashMap的基础上对key增加了链表结构,这样就可以让key的添加顺序和遍历顺序一致,其他操作特点和HashMap一样

  • Map的子类TreeMap

  TreeMap内部是二叉树结构,操作特点和TreeSet相似:

  1 key不可重复

  2 key不支持索引操作

  3 key添加顺序和遍历顺序不一致,遍历时key按自然顺序排序

  4 增、删、查操作效率和TreeSet一样都很高

  • 集合工具类Collections

  Collections是Java集合框架中的工具类,提供了很多工具方法操作集合对象

Collections.sort(list); //对list的元素进行自然排序,要求元素实现Comparable接口
Collections.sort(list, comparator); //使用自定义排序规则对list的元素进行排序
Collections.binarySearch(list, key); //使用已经排序的list进行二分查找
Collections.shuffle(list); //洗牌、打乱list元素位置

关于Java集合框架总结的更多相关文章

  1. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  2. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  3. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  4. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

  5. Java集合框架之map

    Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...

  6. 22章、Java集合框架习题

    1.描述Java集合框架.列出接口.便利抽象类和具体类. Java集合框架支持2种容器:(1) 集合(Collection),存储元素集合 (2)图(Map),存储键值对.

  7. Java集合框架实现自定义排序

    Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优 ...

  8. (转)Java集合框架:HashMap

    来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...

  9. Java集合框架

    集合框架体系如图所示 Java 集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于java.util包中, 所以当使用集合框架的时候需要进行导包. Map接口的常用方法 Map接口提 ...

  10. Java集合框架(常用类) JCF

    Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...

随机推荐

  1. 分布式CAP定理(转)

    在弄清楚这个问题之前,我们先了解一下什么是分布式的CAP定理. 根据百度百科的定义,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性). Availability(可 ...

  2. spring+mybatis 多数据源切换失败的可能原因

    可能因为,加了事务. // @Transactional(readOnly = false) // 需要事务操作必须加入此注解 就因为加了事务,导致了,问题的出现. 不然setCustomerType ...

  3. MySQL性能管理及架构设计:第1章 实例和故事

    1-1 什么决定了电商双11大促的成败 数据库架构 1-2 在双11大促中的数据库服务器 通过监控信息从而确定:哪些因素影响了数据库性能? 1-3 在大促中什么影响了数据库性能 1-4 大表带来的问题 ...

  4. PAT Advanced 1135 Is It A Red-Black Tree (30) [红⿊树]

    题目 There is a kind of balanced binary search tree named red-black tree in the data structure. It has ...

  5. UML-逻辑架构精化

    向下请求:Facade模式 向上返回:观察者模式 不局限于上图中指定的层使用相应模式,其他层也可以使用. 另外,尽量不要出现“公共业务模块”,设计时尽量做好系统拆分.否则,一旦修改公共代码,可能会影响 ...

  6. python编程:从入门到实践----第六章>字典

    一.一个简单的字典:alien_0存储外星人的颜色和点数,使用print打印出来 alien_0 = {'color': 'green','points': 5} print(alien_0['col ...

  7. 【转帖】使用容器化和 Docker 实现 DevOps 的基础知识

    使用容器化和 Docker 实现 DevOps 的基础知识 https://www.kubernetes.org.cn/6730.html 2020-02-24 15:20 灵雀云 分类:容器 阅读( ...

  8. JDK的3个bug啊,你get到了吗?

    1.Annotation引用非空enum数组返回空数组 首次发现时的环境:JDK 1.8 首次发现所在项目:APIJSON 测试用例: publicenumRequestRole {/**未登录,不明 ...

  9. 面试准备 css 书写顺序及原理

    书写顺序 (1)定位属性:position  display  float  left  top  right  bottom   overflow  clear   z-index (2)自身属性: ...

  10. 基于JWT的token认证机制

    1. 一个JWT实际上就是一个字符串,由三部分组成 头部,载荷,签名 头部:事描述类型,签名,算法等 可以被表示成一个JSON对象 载荷:存放有效信息的地方 包含三个部分 (1)标准注册中的声明-建议 ...