Java-容器(集合框架)

关系图

关系图

Collection

Collection - 存储的都是value对象;
Collection是一个接口是最基本的集合接口,可以存储一组不唯一、无序的对象。
Collection下包含List、Queue、Set三个子类

List

List接口是继承自Collection接口的,它的实现类包括:ArrayList、Vector、LinkedList,我们统称它们为List家族吧。
List 家族有一个显著的特点:有序可重复的。

ArrayList

ArrayList的底层实现是数组的数据结构形式,所以它的特点是:适合遍历循环,不适合插入删除操作。
如何创建对象:
1-无参构造方法:new ArrayList();
2-带默认空间的构造方法:new ArrayList(int initialCapacity);
3-带collection参数的构造方法:ArrayList(Collection<? extends E> c);

常用的方法有:

方法说明
boolean add(Object o)在列表的末尾添加,其实索引位置从0开始
void add(int index, Object o)在指定的索引位置添加元素
boolean remove(Object o)从列表中删除元素o
Object remove(int index)从列表中删除指定位置的元素
void set(int index, Object o)将index索引位置的元素替换成o元素
Object get(int index)返回指定索引位置处的元素,取出的元素是Object类型
int size()返回列表中的元素个数
boolean contains(Object o)判断列表中是否存在指定元素o
void clear()清空元素

Vector

vector是ArrayList的早期版本,底层实现也是数组的数据结构形式;它与ArrayList的区别类似于StringBuffer与StringBuilder的区别;
vector线程安全,安全性高,但效率低;vector默认扩容2倍,arrayList默认扩容1.5

如何创建对象:
1-无参构造方法:new Vector()
2-带collection参数的构造方法:Vector(Collection<? extends E> c)
3-带默认空间的构造方法:Vector(int initialCapacity)

LinkedList

linkedlist既是List的实现类,也是Queue的实现类;所以它实现了两个接口的方法。
linkedList的底层使用双向链表的数据结构形式来存储,适合做插入和删除操作,不适合遍历循环(因为链表结构中的数据不连)

如何创建对象:
1-无参构造方法:new LinkedList()
2- 带collection参数构造方法:LinkedList(Collection<? extends E> c)

常用方法:

方法说明
boolean add(Object o)在列表的末尾添加,其实索引位置从0开始
void add(int index, Object o)在指定的索引位置添加元素
void addFirst(Object o)在当前集合的首部添加元素
void addLast(Object o)在当前集合的尾部添加元素
boolean remove(Object o)从列表中删除元素o
Object remove(int index)从列表中删除指定位置的元素
Object removeFirst()移除当前集合首部的元素
Object removeLast()移除当前集合尾部的元素
void set(int index, Object o)将index索引位置的元素替换成o元素
Object get(int index)返回指定索引位置处的元素,取出的元素是Object类型
Object getFirst()获取当前集合首部的元素
Object getLast()获取当前集合尾部的元素
int size()返回列表中的元素个数
boolean contains(Object o)判断列表中是否存在指定元素o
void clear()清空元素

Queue

Queue接口目前用的比较少,我们简单的讲一下。
Queue接口的存储效果是先进先出。通常子类包含:linkedList,ArrayDeque

常用方法:
add();添加元素
remove();删除元素
element();获取元素
offer()// 相当于add(),但不会抛异常
poll()//相当于remove(),只不过poll是取最先进入元素删除,且获取失败时返回空,不抛异常
peek()//相当于element(),但不会抛异常

Set

set接口继承collection接口,它的实现类有:HashSet和TreeSet;我们统称它们为Set家族。
Set家族有一个特点是:无序不可重复的;这里的无序是指添加的顺序和获取的顺序不一致。

HashSet

HashSet的底层是HashMap实现的。HashSet的值存放在HashMap的key上,HashMap的value统一为PRESENT。因此HashSet是无序不可重复的。
其实HashSet本身有自己的算法排布顺序,根据hash算法,但我们前面已经讲了,这里的无序是指添加顺序和获取顺序不一致。

因为set家族是不可重复的,所以它们都没有修改方法。

不重复规则:
1-利用equals和hashcode方法进行比较是否重复
2-发现重复元素,拒绝存入,只存储第一次的元素

常用方法:

方法说明
boolean add(Object o)在Set中添加元素o
boolean remove(Object o)从Set中删除元素o
int size()返回set中的元素个数
boolean contains(Object o)判断set中是否存在指定元素o
void clear()清空set中所有元素
boolean isEmpty()判断set是否为空

由于HashSet的底层是HashMap实现的,所以我们不能像获取List中元素一样,使用数组下标进行获取;
那么我们该如何实现获取呢?
1-使用增强for循环进行集合遍历

for(Object set:HashSet){
	system.out.println(set);
}

2-使用迭代器

HashSet<E> hashset= new HashSet<E>();
        Iterator<E> iterator = hashset.iterator();
        while (iterator.hasNext()){
            iterator.next();
        }

TreeSet

TreeSet底层是由TreeMap实现;
不可重复规则:按照compareTo(unicode码)规则排序
这里有一个小提示–当你想要将自己写的类存入TreeSet中时,需要实现comparable接口重写compareTo方法;返回int值,负数靠前,正数靠后排序

如何创建对象:
1- 无参构造函数:new TreeSet()
2- 带collection参构造函数:TreeSet(Collection<? extends E> c)

Map

Map家族的存储方式是以key-value的形式存值的,key是无序不可重复的,value无序可重复;
当发现key相同的情况下,value进行覆盖存储,保留最后一次存储的值。

HashMap

HashMap有一个早期版本HashTable;
HashMap和HashTable的区别:
1-HashTable是线程安全的
2-HashTable是同步的,效率低
3-HashTable不允许有空键值

底层的数据结构:散列表形式(数组+链表);数组存放的是HashCode码;如发现存储对象的HashCode码相同,就会在当前数组后面串上一个Node。因此HashMap插入删除操作的效率更高一些

如何创建对象:
1-无参构造方法:HashMap()
2-带默认空间的构造方法:HashMap(int initialCapacity)
3-带map的构造方法:HashMap(Map<? extends K,? extends V> m)

常用方法:

方法说明
Object put(Object key, Object value)将相互关联的一个key和value放入该集合
Object remove(Object key)从Map中移除与指定key相关联的映射
Object repalce(Object key, Object value)替换map中指定key相关联的映射
Object get(Object key)获取指定key相关联的映射
Set keySet()获取所有key的集合
boolean containsKey(Object key)判断集合中是否存在key
boolean containsValue(Object value)判断集合中是否存在value
int size()返回集合中元素的数量
void clear()清除集合中所有元素
Object getOrDefault(Object key, Object defaultValue)如果key存在取值,不存在使用defaultValue
Object putIfAbsent(Object key, Object value)如果key存在就放弃,如果key不存在就存入

对于Map家族来说,遍历集合就显得有些麻烦了;我们需要先遍历所有的key,再通过key获取到value;

Set keys = hashMap.keySet();
for(Object key: keys) {
	hashmap.get(key);
}

TreeMap

底层实现:红黑二叉树

如何创建对象:
1-无参构造方法:TreeMap()
2-带map参数的构造方法TreeMap(Map<? extends K,? extends V> m)

常用方法:

方法说明
Object put(Object key, Object value)将相互关联的一个key和value放入该集合
Object remove(Object key)从Map中移除与指定key相关联的映射
Object repalce(Object key, Object value)替换map中指定key相关联的映射
Object get(Object key)获取指定key相关联的映射
Set keySet()获取所有key的集合
boolean containsKey(Object key)判断集合中是否存在key
boolean containsValue(Object value)判断集合中是否存在value
int size()返回集合中元素的数量
void clear()清除集合中所有元素
Object getOrDefault(Object key, Object defaultValue)如果key存在取值,不存在使用defaultValue
Object putIfAbsent(Object key, Object value)如果key存在就放弃,如果key不存在就存入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值