Java集合类框架总结
一、Collection接口
Collection接口属于java.lang包,是集合类框架的主要接口,List接口、set接口、Queue接口继承了Collection接口,分别是列表、集合和队列。
1、List接口
java.lang.List接口主要定义了一些添加、获取、删除的元素的方法,主要是存储引用。注意:基本数据类型在进行操作时,会自动进行拆装箱。元素是有序的,并且可以重复,每个元素都有自己的索引
void add(Object obj); //顺序的将一个引用放入列表中,增加元素
void add(int index,Object obj); //在指定位置增加元素
Object get(int index); //获取某个位置的引用
Object remove(int index); //删除指定位置元素
void set(int index,Object obj); //更改某一位置的元素
int size(); //得到当前列表的大小
ArrayList类:List接口的实现类
- 底层结构是动态数组
- 不支持线程同步,建议在单线程时使用
- 由于底层是数组,因此查找快,增删较慢,需要移动元素
LinkedList类:List接口的实现类
- 底层使用链表数据结构
- 不支持线程同步
- 查找需要遍历链表,因此慢,增删必须要移动元素,快
Vector类:List接口的实现类
- 底层是动态数组
- 支持线程同步,是线程安全的
- 查找快,增删慢
2、Set接口
Set是接口是集合,需要满足数学上集合特性,无序性、互异性,不支持线程同步
HashSet类:
- 底层是哈希表数据结构,根据hashcode()和equals()方法确定元素的唯一性
- 集合中的元素不重复且是无序的
TreeSet类:
- 底层数据结构是二叉树
- 可以对Set集合中的元素进行排序,自然顺序。也可以自己写个类实现Comparable接口或者Comparator接口,定义自己的比较器。
先准备一个类吧,要求对年龄从小到大进行排序
public class People{int age;String name;public People(int age,String name){this.age = age;this.name = name;}public int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;People other = (People) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}}
方式一:实现Comparator接口,不需要在类中实现该接口
public static void main(String[] args) {// TODO 自动生成的方法存根ArrayList<People> list = new ArrayList<>();list.add(new People(15,"张三"));list.add(new People(14,"李四"));list.add(new People(20,"王五"));list.add(new People(17,"赵六"));Collections.sort(list,new Comparator<People>() {@Overridepublic int compare(People o1, People o2) {if(o1.age > o2.age)return -1;if(o1.age < o2.age)return 1;return 0;}});for(int i = 0; i < list.size();i++) {System.out.println(list.get(i).name + ":" + list.get(i).age);}
}//输出
王五:20
赵六:17
张三:15
李四:14
方法二:在People类中实现Comparable接口
public class People implements Comparable<People>{int age;String name;People(int age,String name){this.age = age;this.name = name;}public int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;People other = (People) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic int compareTo(People o) {// TODO 自动生成的方法存根if(this.age > o.age)return 1;if(this.age < o.age)return -1;return 0;}
}
public static void main(String[] args) {Set<People> set = new TreeSet<>();set.add(new People(15,"张三"));set.add(new People(14,"李四"));set.add(new People(20,"王五"));set.add(new People(17,"赵六"));for(People p : set)System.out.println(p.name + ":" + p.age);
}
//输出
李四:14
张三:15
赵六:17
王五:20
二、Map接口
该集合是存储键值对的,确保键的唯一性。综合考虑了数组查找快和链表增删快的优点。
put(Object key,Object value);//向map中放入一个值
Object get(Object key);//根据键找值
boolean containsKey(Object key);//判断Map中是否有值为key的键
remove(Object key);//删除键值为key的键值对
int size();//得到键值对的个数
1、HashMap类
- 底层是哈希表数据结构
- 可以存入null键和null值,但最多允许一个键为null,多个值为null
- 线程不同步,但是效率高
- 如果想要线程同步,可以考虑使用ConcurrentHashMap
2、 HashTable类
- 底层是哈希表数据结构
- 不允许键或者值为null
- 支持线程同步,效率没有HashTable高
3、 TreeMap
- 底层二叉树数据结构
- 线程不同步
- 可以对map集合进行排序,可以自己指定比较器,与TreeSet相似
三、Java中Collection集合常见的面试题
1、ArrayList与LinkedList的区别
2、ArrayList与Vector的区别
3、HashMap与HashTable的区别
4、HashMap与ConcurrentHashMap以及HashTable的区别
5、HashSet如何检查元素的重复
7、有关Comparator接口与Comparator接口的区别(在TreeSet与TreeMap中可能会用到)
8、ConcurrentHashMap线程安全的具体实现方式
Java集合类框架总结相关推荐
- Java集合类框架源码分析 之 LinkedList源码解析 【4】
上一篇介绍了ArrayList的源码分析[点击看文章],既然ArrayList都已经做了介绍,那么作为他同胞兄弟的LinkedList,当然必须也配拥有姓名! Talk is cheap,show m ...
- 夯实Java基础系列19:一文搞懂Java集合类框架,以及常见面试题
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- Java集合类框架的基本接口有哪些?
总共有两大接口:Collection 和Map ,一个元素集合,一个是键值对集合: 其中List和Set接口继承了Collection接口,一个是有序元素集合,一个是无序元素集合: 而ArrayLis ...
- c++ map的存储结构_「软帝学院」java集合类框架map及相关常见问题二
Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...
- java 面试 框架_这份java集合框架面试题,轻松搞定面试官!
集合框架 1. ArrayList 和 Vector 的区别. 这两个类都实现了 List 接口(List 接口继承了 Collection 接口),他们都是有序集 合,即存储在这两个集合中的元素的位 ...
- 传递集合对象_面试必备——Java集合框架
Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...
- collection集合 多少钱_面试必备-Java集合框架
Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...
- java集合框架源代码_面试必备——Java集合框架
Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...
- 面试必备-Java集合框架
Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...
最新文章
- HDU6964 I love counting (字典树+莫队)
- 骑士旅行pascal解题程序
- oracle exp导出成功终止,成功终止导出
- 服务器cpu,内存正常, 部分网站打不开,提示死锁,应用程序池回收就正常,如何解决?...
- RabbitMQ快速入门--消息模型介绍
- c++大文本比较_Excel – 将文本转换为数值,第二种方法会的请举左手
- mvc 事务层切换数据源_Mvc 与 Flux 与 Redux的一些思考
- 小米登录协议分析_性能测试篇之Loadrunner与ida工具结合完成java vuser协议的脚本...
- 业务 T+1 T+2
- RS-232 vs. TTL Serial Communication(转载)
- 木马编程DIY (Delphi版) - 第2篇 单实例运行
- 《图解算法》学习笔记之递归
- python自动下载酷狗音乐_python获取酷狗音乐top500的下载地址 MP3格式
- 匈牙利算法及KM算法详解
- LTE手机接收灵敏度究竟如何?
- 水星路由器怎么设置虚拟服务器,水星路由器怎么设置图解教程
- vue简单购物车结算计算总价
- UE4蓝图(很经典) 间隔1秒就执行一次,间隔循环执行
- Load Balancer as a Service (LBaaS V2.0)
- Python爬虫实战—2345影视获取经典电影信息