集合框架
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合框架相关的知识,希望对你有一定的参考价值。
集合框架
一.作用
1.用来存储多个数据
2.实现了不同的数据结构
二.集合框架被设计成要满足以下几个目标。
1.该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
2.该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
3.对一个集合的扩展和适应必须是简单的。
三.集合框架包含的内容
1.接口:是代表集合的抽象数据类型。接口允许集合独立操纵其代表的细节。在面向对象的语言,接口通常形成一个层次。
2.实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构。
3.算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
四.集合接口
序号 |
接口描述 |
1 |
Collection 接口 Collection 是最基本的集合接口,一个 Collection 代表一组 Object,Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。 |
2 |
List 接口 List接口是一个有序的Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的小标)来访问List中的元素,而且允许有相同的元素。 |
3 |
Set Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。 |
4 |
SortedSet |
5 |
Map |
6 |
Map.Entry |
7 |
SortedMap |
8 |
Enumeration |
补充:LIst:
1.List继承了Collection接口,并且扩展出属于自己的方法;
List 集合中的元素都是与索引有关系的,因此List
集合扩展的方法都是与索引有关系的。
2.List 是个接口,有三个实现的类
ArrayList:数组列表,数据采用数组方式存储。
LinkedList: 链表
Vector:jdk1.0中的集合,实现了同步
Set:
1.Set接口继承了Collection接口。
Set中所存储的元素是不重复的,但是是无序的
也就是说,Set中的元素是没有索引的
2.Set接口有两个实现类
HashSet:底层是哈希码值,基于HashMap实现的。
TreeSet:元素不重复,并且元素实现了排序。
五.Set和List的区别
1. Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
3. List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。
六.List接口的常用实现类
1.ArrayList
ArrayList被称为数组列表,数据采用数组的方式存储,使用连续内存存储。ArrayList是Java语言中可变长度数组的实现。
2.ArrayList的常用方法
add(Object o);->集合中添加数据
remove(Object o)->删除集合中的数据
add(int index, Object element)->给集合中某个索引位置添加一个数据
get(int index)->获取集合中某个位置的信息
3.LinkedList
称为链表,该集合类型实现了“链表”的数据结构。值得一提的是,LinkedList不仅实现了List接口,还实现了Queue接口,可以说链表同时也可以作为一个队列对象使用。使用方式与ArrayList类似。
4.LinkedList的常用方法
LinkedList是以链表的方式存放的,每个节点上存放的是数据信息
(1)常用方法:
add(E element)—向链表末尾添加一个新的节点,该节点中的数据是参数element指定的对象。
add(int index, E element)—向链表的指定位置添加一个新的节点,该节点中的数据是参数element指定的对象。
(2)扩展的方法:
addFirst(E element)—向链表的头添加新节点,该节点中的数据是参数element指定的对象。
addLast(E element)—向链表的末尾添加新节点,该节点中的数据是参数element指定的对象。
5.Vector
Vector是JDK1.0版本中的集合类,后来修改为实现了List接口。Vector的功能几乎都可以被ArrayList替代,主要区别是Vector是同步的,而ArrayList不是同步的。
6.ArrayList和LinkedList的遍历
for循环遍历:通过索引值获取所对应的数据信息
public class GenericsList {
public static void main(String[] args) {
//创建用户对象
User user=new User("张三");
User user1=new User("李四");
//创建集合对象,存放用户对象
List<User> userList=new ArrayList<User>();
userList.add(user);
userList.add(user1);
for(int i=0;i<userList.size();i++){
System.out.println(userList.get(i));
}
}
}
增强for循环的遍历:也是通过迭代器的方法获取信息
public class GenericsList {
public static void main(String[] args) {
//创建用户对象
User user=new User("张三");
User user1=new User("李四");
//创建集合对象,存放用户对象
List<User> userList=new LinkedList<User>();
userList.add(user);
userList.add(user1);
for(User userInfo:userList){
System.out.println(userInfo);
}
}
}
七.Map集合的常用实现类
1.HashMap
HashMap中元素的key值不能重复,即彼此调用equals方法,返回为false。排列顺序是不固定的。
2.HashMap的常用方法
put<key,value>—>存放对象
get(key); —>获取key所对应的数据。
keySet() —> 返回此映射中所包含的键的 set 视图。
3.TreeMap
TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
4.TreeMap的常用方法与HashMap类似
补充:TreeMap适用于按自然顺序或自定义顺序遍历键(key)。TreeMap根据key值排序,key值需要实现Comparable接口,实现compareTo方法。TreeMap根据compareTo的逻辑,对key进行排序。
八.Properties类
Properites类是Hashtable类的子类,所以也间接地实现了Map接口。
在实际应用中,常使用Properties类对属性文件进行处理。
常用方法:load();加载文件;
getProperty(key);通过key值获得对应的value值
setProperty(String key,String value)给properties文件中写值。
九.Collections类
1.概念:
是集合类的工具类,与数组的工具类Arrays类似
定义了大量静态方法
(1)同步集合对象的方法
(2)对List排序的方法
2.Collections方法的介绍
—同步集合的方法
Set<T> synchronizedSet(Set<T> s) 返回由指定 set 支持的同步(线程安全)的set。
Map<K,V> synchronizedMap(Map<K,V> m) 返回由指定 map 支持的同步(线程安全)的map。
—对List 排序的方法
sort(List<T> list> 根据元素的自然顺序 对指定列表按升序进行排序。
以上是关于集合框架的主要内容,如果未能解决你的问题,请参考以下文章