java集合要点摘录以及面试题

本文介绍了Java集合框架中的核心概念,包括集合、数组的区别,集合两大分支Collection和Map,以及各自的特点和使用场景。重点讲解了集合遍历方式,如Iterator和ListIterator的使用,并列举了面试中常见的集合题目,强调了泛型、接口和类的重要性,特别是HashMap的工作原理及面试技巧。此外,还探讨了线程安全和集合操作的最佳实践。
摘要由CSDN通过智能技术生成

集合(容器):是一种工具类,就像是容器,储存任意数量的具有共同属性的对象

集合和数组的区别:

  • 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。
  • 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。

java中集合类主要有两大分支:Collection 和 Map

在这里插入图片描述

在这里插入图片描述

集合的基础知识:(结构等等)这里就不说了,大家自行学习。

  • Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是SetListSet中不能包含重复的元素List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
  • Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。

Collection遍历

  • Iterator(遍历集合工具),所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
    • hasNext()是否还有下一个元素。
    • next()返回下一个元素。
    • remove()删除当前元素。
  • ListIterator:是Iterator的子接口,专门用于输出List中的内容。用法同Iterator。ListIterator的特有方法:
    • add(E e) :将指定的元素插入列表(可选操作)。
    • hasPrevious() :如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。前提是必须先正向遍历到集合最后
    • previous() :返回列表中的前一个元素。
    • set(E e) :用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。
  • foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合
  • for循环
代码示例如下:

 for的形式:for(int i=0;i<arr.size();i++){...}

 foreach的形式: for(int i:arr){...}

 iterator的形式:
Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}

Map 遍历

  • 第一种:KeySet()
将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key 。
取到的结果会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。
典型用法如下:
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put("key3","lisi3");
map.put("key4","lisi4");  
//先获取map集合的所有键的set集合,keyset()
Iterator it = map.keySet().iterator();
 //获取迭代器
while(it.hasNext()){
Object key = it.next();
System.out.println(map.get(key));
}
  • 第二种:entrySet()
Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()两种方法来取key和value。返回的是Entry接口。
典型用法如下:
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put("key3","lisi3");
map.put("key4","lisi4");
//将map集合中的映射关系取出,存入到set集合
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Entry e =(Entry) it.next();
System.out.println("键"+e.getKey () + "的值为" + e.getValue());
}
推荐使用第二种方式,即entrySet()方法,效率较高。
对于keySet其实是遍历了2次,一次是转为iterator,一次就是从HashMap中取出key所对于的value。而entryset只是遍历了第一次,它把key和value都放到了entry中,所以快了。两种遍历的遍历时间相差还是很明显的。

重要的接口和类简介

接口

1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值