java集合总结

集合

数组:内存中一段连续的内存空间,用于存放多个相同类型的数据
优点:有下标,访问便利
缺点:插入删除效率低、数组长度固定

集合的结构如下图所示:

这里写图片描述
collection

集合的两个顶级接口分别为:Collection和Map

Collection下有两个比较常用的接口分别是List(列表)和Set(集),其中List可以存储重复元素,元素是有序的(存取顺序一致),可以通过List脚标来获取指定元素;而Set不可以有重复元素,元素是无序的。

List

List接口中,比较常用的类有三个:ArrayList、Vector、LinkedList(有序,可重复) ArrayList
:底层数据结构是动态数组,查询快,增删慢 线程不安全,效率高

Vector :底层数据结构是动态数组,查询快,增删慢 线程安全,效率低
LinkedList :底层数据结构是链表,查询慢,增删快
线程不安全,效率高
Stark :底层采用动态数组,具有后进先出的特性
常用的方法:
add remove get(int index)获取指定位置的元素
set(int index,object obj)将指定位置的元素改为指定的对象

Queue接口

先进先出的数据结构。 与list和set平级,
Deque接口 表示双端队列 实现类LinkedList增删方便,修改不方便
方法:peek队首元素 poll队列头

Set
Set接口中,比较常用的类有两个:HashSet、TreeSet:

HashSet:底层数据结构是哈希表唯一、允许为null
哈希表依赖两个方法:hashCode()和equals()
TreeSet:底层数据结构是红黑树。(是一种自平衡的二叉树),以二叉树的结构对元素进行存储,可以对元素进行排序。

Map

Map接口其特点是:元素是成对出现的,以键和值的形式体现出来,键要保证唯一性:常用类有:HashMap,Hashtable ,TreeMap。

HashMap:底层数据结构是哈希表。线程不安全,效率高 快速查找映射关系、键值可null
哈希表依赖两个方法:hashCode()和equals() Hashtable:线程安全的,不允许存放null键null值。

TreeMap:底层数据结构是红黑树。(是一种自平衡的二叉树)
两种方式 自然排序(元素具备比较性) 比较器排序(集合具备比较性)

二叉树

(1)什么是二叉树?
二叉树就是指每个节点最多拥有两个子节点的树形结构,通俗来说,最多有两个分叉
(2)什么是有序二叉树?
满足以下三个特征的二叉树叫做有序二叉树,又叫做二叉查找树。
a.要求左子树中所有的节点都必须小于根节点。
b.要求右子树中所有的节点都必须大于根节点。
c.左右子树内部还要满足上述规则。

(3)什么是平衡二叉树
平衡二叉树就是指左右子树高度差的绝对值不超过1的二叉树。 TreeSet类的底层就是一颗平衡有序二叉树。

(4)TreeSet类放入元素的过程 当向TreeSet类中放入元素时,需要指定元素的比较规则,指定方式有两种:
a.让元素类型实现java.lang.Comparable接口,重写compareTo()方法,自然排序
b.在创建集合时传入java.util.Comparator对象,重写compare()方法,比较器

Hashmap Hashtable的区别

Hashtmap 不支持线程安全 允许键值为null
Hashtable 支持线程安全 不允许键值为null

Map常用方法:put存储key value get根据key获取值 keySet 获取该集合的所有key组成set集合
values 获取该集合的所有值对象组成collection集合

Collection和Map两个接口对元素操作的区别:

存入元素: Collection接口下的实现类通过add方法来完成,而Map下是通过put方法来完成。

取出元素:
Collection接口下:List接口有两种方式:1、get(脚标);2、通过Iterator迭代方式获取元素;而Vactor多了一种枚举(Enumeration)的方式。Set接口通过迭代的方式获取元素。

Map接口下:先通地keySet获取键的系列,然后通过该系列使用Iterator迭代方式获取元素值。

迭代器的使用

boolean hasNext() - 判断集合中是否有可以迭代的元素,若有则返回true。
E next() - 获取集合中的一个元素,并且指向下一个元素。
void remove() - 用于删除迭代的一个元素。

注意:
使用迭代器遍历集合中的元素时,不允许调用集合中的方法删除元素,只能通过迭代器自己的remove()进行元素的删除,否则引发对象并发修改异常。

增强版的for循环(for each)

(1)语法格式

for(元素类型 变量名 : 数组名/集合名){
循环体,使用变量名代表当前元素;
}

集合代码:

List c1=new ArrayList();
c1.add(0,"asdds")指定下标插入的元素
c1.add(new Student(1001,"asdd"))
c1.get(0)获取0下标的元素
c1.size()
c1.remove("1")
c1.subList(1,4)指定位置的所有元素 前包后不包
c1.set(1,3)将下标为1 的元素改为3
c1.clear();
输出所有元素
for(int i=0;i<c1.size();i++){
 Sytem.out.println(c1.get(i));
}

add get size remove subList set clear
Set<Integer> s1=new HashSet<Integer>();
s1.add(11);
// 使用迭代器可以遍历集合中的所有元素
Iterator<Integer> it=s1.iteractor();
while(it.hashNext()){
    Integer in=it.next();
    //输出每一个元素
   System.out.println(it.next());
}

//将集合中使用“t”开头的元素找到并删除
        while(it.hasNext()){
            //System.out.println("其实这里的代码根本没有执行");
            if(it.next().startsWith("t")){
                //引发对象并发修改异常,因为集合在迭代的过程中不允许修改
                //s1.remove(it.next());
                it.remove(); //表示删除刚刚迭代的元素
            }
        }

// 使用for each实现集合中元素的遍历
for(Integer in:ss1){
System.out.println(in);
}
Map<String,String> m1=new HashMap <String,String>();
m1.put("1","one");
m1.get("1")
m1.containtsKey(1)
m1.containtsValue(4);
m1.remove("1");

//将Map转换为Set,得到Set的视图
Set<Map.Entry<String,String>> s1=m1.entrySet();
for(Map.Entry<String,String> me:s1){
System.out.println(me.getKey()+me.getValue());
}
  //获取Map中的key组成的Set视图
Set<String> s2=m1.keySet();
for(String s:s2){
 System.out.println(m1.get(s));
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值