JAVA 集合ArrayList,Set,Map函数使用方法


集合Collection接口:
 Collection c1=new ArrayList();    -->创建一个可变数组
 List和set都属于Collection接口里面的 *Map属于另一个接口
 Collection有一个工具类叫Collections 比他多一个s 里面有提供很多方法如吧线程改成安全的

集合:ArrayList可变数组:
  List  list1=new ArrayList(); -->底层数组 查询快
  List li=new LinkedList();   -->底层链表 插入删除快 无序
   -->Arraylist 初始化长度为10,后面长度不够<默认为扩容1.5倍> 同时将数组复制到新的数组中 条件允许开发中使用带参的构造器确认数组长度
   -->8.0版本之后刚刚创建开始是 空{}  在add操作之后才开始创建 长度为10的操作 这样子可以节约内存
   -->LinkedList无序可变数组 -->底层采用的是双向链表结构 频繁的插入和删除调用它最好  因为下面需要频繁的操作指针所以只需要添加不需要频繁修改 的话使用ArrayList比较快

 添加插入:
   list1.add(a);       -->添加
   list.add(1,"我好"); -->在指定下标插入
   list.addAll(list1);-->吧另一个可变数组添加到此数组后面
 删除:
  list1.remove(2);       -->移除指定下标
  list1.remove("你好");  -->移除指定元素
  list1.removeAll(coll);-->查找2个重复的如果相同就不输入相同的
 修改:
  list1.set(1, "你好"); -->修改  指定坐标的值
 查询:
   list1.get(1)                    -->查询下标为1对应的东西
   int a= list1.indexOf("你好")    -->查找"你好"对于的下标->如果不存在返回-1
   int a=list.lastIndexOf("123"); -->查找"123"最后一次出现的位置->如果不存在返回-1
   List l1=list.subList(0,3);     -->获取下标0到3位置下的值
   list1.retainAll(c2);           -->查找相同的,输出出来并且修改完成之后list1就为相同的了
   list1.removeAll(c1);           -->查找2个重复的如果相同就不输入相同的[你好, 4] 并且修改完成之后list1就里面就存储2个相同的
 转换:
   Object[] objects = list1.toArray();    -->集合转换成数组
   List list= Arrays.asList(new Integer[]{123,123}); -->吧数组转换成集合

遍历1:
iterator()-->遍历操作 每次调他都会返回迭代器开头  -> Iterator 迭代器,再次调用他将会吧指针返回到初始化位置0
{
  -> Iterator iterator = list.iterator(); -->集合的遍历迭代器为0
        while(iterator.hasNext()) -->判断hasNext元素指针下一个是否有元素
        {
            iterator = list1.iterator(); -->返回到指针开始
            System.out.println(iterator.next()); -->输出元素   next 是指针下移
            iterator.remove();-->删除元素
        }
}
遍历2:
list1.forEach(System.out::println); -->新的遍历方法java8新特性
遍历3:
for(Object O:list1)
{
  System.out.println(O);
}

集合:LinkedList
 List list=new LinkedList();
for (Object e:list)  -->增强for循环 前面是类型后面是需要循环的值


Set接口:
Set s1=new HashSet();   -->按照类型来排序
Set s1=new LinkedHashSet(); -->按照输入顺序排序
Set s1=new TreeSet(); -->按照输入顺序排序 ,根据第一个类型判别后面所有类型

< map = new HashMap<>()>底层调用了此
-->
-->1.不可重复:是指地址值不可重复  如果有重复只输出一次,
-->2.无序性不等于随机性  存储的数据在地址也中并非按照索引顺序添加的.
-->3.底层采用链表加数组 通过哈希表  先通过计算哈希值判断位置然后找到数组位置 位置上如果没有值就直接放进去,
-->如果有值哈希值相同就比较equas值, 如果值也相同就残忍抛弃,如果不相同就添加上用链表连接,下一个值进来的时候有会判断上一个和本值是否不一样如果不一样也放进来

Map接口:实现类
  Map map1=new HashMap();  -->1
  Map map2=new LinkedHashMap();-->2
  Map map3=new TreeMap();  -->3
  Map map3=new Hashtable();-->4  --废弃方法,古老实现类线程不安全  不可以存储null的key和value

  <1>主要实现类,线程不安全,效率高,可以存储null的key和value ->底层采用数组加链表(java7)  (java8)之后采用数组+链表+红黑树
  <2>保证遍历map元素时key,按照顺序执行遍历,底层有(双向链表) ->对于频繁的遍历操作 效率高于HashMap
  <3>保证按照添加发的key——value 对于进行排序,实现排序遍历,底层使用(红黑树)
  <4>Properties 子类  常用来处理配置文件 底层key value都是string类型的

    -->HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
    -->HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
    -->HashMap 是无序的,即不会记录插入的顺序。
    -->HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

Map接口:方法
添加:
map1.put("AA",111);-->添加
删除:
map1.remove("AA");  -->移除所对应的key和value
修改:
map1.put("AA",444); -->如果key一样那么修改后面对于的值为444
查询:
Object var=map1.remove("BB");  -->接收到BB所对应的value, 不存在放回null <删除>
Object var=map1.get("AA");    -->返回key“AA”所对应的value,不存在返回null
Object var=map1.size();      -->返回key“AA”所对应的长度

bool b=containsKey() 方法检查 hashMap 中是否存在指定的 key 对应的映射关系。
如果 hashMap 中是否存在指定的 key 对应的映射关系返回 true,否则返回 false。

-->遍历
Set set = map1.keySet(); -->对于的所有key值
Collection values = map1.values(); -->对应所有的value值
Set set2 = map1.entrySet();-->对应的所有的set和对应的vlue值


容器:Collections工具类
    Collections.reverse(li);     -->反转数组
    Collections.sort(li);       -->对集合进行自然排序
    Object obj=Collections.max(li);  -->返回元素中最大的值
    Object obj=Collections.frequency(li,21); -->返回元素中21出现的次数

    Collections.synchronizedXXXX(li)               -->返回一个线程安全的对象;
    List list = Collections.synchronizedList(li); -->返回一个List安全对象
    Set set=Collections.synchronizedSet(l2);     -->返回一个Set安全对象
    Map map=Collections.synchronizedMap(l3);    -->返回一个Map安全对象
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。 目录: 一、Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与 String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用 final 修饰吗? 14.接口和抽象类有什么区别? 15.java 中 IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和 Collections 有什么区别? 20.List、SetMap 之间的区别是什么? 21.HashMap 和 Hashtable 有什么区别? 22.如何决定使用 HashMap 还是 TreeMap? 23.说一下 HashMap 的实现原理? 24.说一下 HashSet 的实现原理? 25.ArrayList 和 LinkedList 的区别是什么? 26.如何实现数组和 List 之间的转换? 27.ArrayList 和 Vector 的区别是什么? 28.Array 和 ArrayList 有何区别? 29.在 Queue 中 poll()和 remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器 Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和 ListIterator 有什么区别? 34.怎么确保一个集合不能被修改? 三、多线程 35.并行和并发有什么区别? 36.线程和进程的区别? 37.守护线程是什么? 38.创建线程有哪几种方式? 39.说一下 runnable 和 callable 有什么区别? 40.线程有哪些状态? 41.sleep() 和 wait() 有什么区别? 42.notify()和 notifyAll()有什么区别? 43.线程的 run()和 start()有什么区别? 44.创建线程池有哪几种方式? 45.线程池都有哪些状态? 46.线程池中 submit()和 execute()方法有什么区别? 47.在 java 程序中怎么保证多线程的运行安全? 48.多线程锁的升级原理是什么? 49.什么是死锁? 50.怎么防止死锁? 51.ThreadLocal 是什么?有哪些使用场景? 52.说一下 synchronized 底层实现原理? 53.synchronized 和 volatile 的区别是什么? 54.synchronized 和 Lock 有什么区别? 55.synchronized 和 ReentrantLock 区别是什么? 56.说一下 atomic 的原理? 四、反射 57.什么是反射? 58.什么是 java 序列化?什么情况下需要序列化? 59.动态代理是什么?有哪些应用? 60.怎么实现动态代理? 五、对象拷贝 61.为什么要使用克隆? 62.如何实现对象克隆? 63.深拷贝和浅拷贝区别是什么? 六、Java Web 64.jsp 和 servlet 有什么区别? 65.jsp 有哪些内置对象?作用分别是什么? 66.说一下 jsp 的 4 种作用域? 67.session 和 cookie 有什么区别? 68.说一下 session 的工作原理? 69.如果客户端禁止 cookie 能实现 session 还能用吗? 70.spring mvc 和 struts 的区别是什么? 71.如何避免 sql 注入? 72.什么是 XSS 攻击,如何避免? 73.什么是 CSRF 攻击,如何避免? 七、异常 74.throw 和 throws 的区别? 75.final、finally、finalize 有什么区别? 76.try-catch-finally 中哪个部分
### 回答1: Java 集合是一个存储对象的数据结构,可以在程序中方便地进行数据的存储、检索和操作。它是 Java 标准库的一部分,提供了许多内置的容器类,如 List、SetMap 等。这些容器类都实现了 Collection 接口,定义了一些基本的数据存储和操作方法,如 add、remove、size 等。 通过使用 Java 集合,可以简化代码,提高程序的可读性和可维护性,也可以提高程序的效率。 ### 回答2: Java集合是用于存储和处理一组相关数据对象的容器。它是Java编程语言中非常重要的一部分,提供了一系列接口和类来实现不同类型和功能的集合Java集合框架提供了多种集合实现,以满足不同的应用需求。 Java集合可以根据其结构分为两大类:一是单列集合,如List、Set和Queue;二是双列集合,如Map。 List是有序的集合,可以包含重复元素。它有多个实现类,其中比较常用的是ArrayList和LinkedList。ArrayList底层采用动态数组实现,支持随机访问,适用于频繁访问和修改的场景。而LinkedList底层采用双向链表实现,适用于频繁插入和删除的场景。 Set是无序且不可包含重复元素的集合。它有多个实现类,例如HashSet和TreeSet。HashSet基于哈希表实现,具有较快的元素查找和插入速度,而TreeSet基于红黑树实现,可以按照元素的自然顺序进行排序。 Queue是一种先进先出(FIFO)的集合,它用于存储和操作待处理元素。常用的实现类有LinkedList和PriorityQueue。 Map是一种键值对的集合,每个键对应一个唯一的值。常见的实现类有HashMap和TreeMap。HashMap基于哈希表实现,可以快速进行键值对的查找和插入操作,而TreeMap则基于红黑树实现,可以按照键的自然顺序对键值对进行排序。 除了以上常用的集合类,Java集合框架还提供了一些辅助类和接口,如Collections和Iterator,用于提供集合的各种操作和迭代访问。 Java集合提供了一种便捷的方式来管理和操作数据,极大地简化了编程工作。开发者可以根据需求选择合适的集合类,提高代码的可读性、可维护性和性能。 ### 回答3: Java集合Java语言中的一种数据结构,用于存储和操作一组数据。Java集合提供了一系列的接口和类,用于实现不同类型的集合Java集合框架主要由以下几个核心接口和类组成: 1. Collection接口:是所有集合类的父接口,定义了集合类的基本操作,如添加、删除、遍历等。常用的实现类有List(有序可重复集合)、Set(无序不可重复集合)和Queue(队列)。 2. Map接口:用于存储键值对的数据结构,每个键唯一对应一个值。Map接口的常用实现类有HashMap、TreeMap和LinkedHashMap。 3. ArrayList类:实现了List接口,基于数组实现的动态数组。它可以根据需要自动扩容,支持动态增删元素。 4. LinkedList类:实现了List和Queue接口,基于双向链表实现的。它可以高效地完成插入、删除等操作,适用于频繁插入和删除操作的场景。 5. HashSet类:实现了Set接口,基于哈希表实现的无序不可重复集合。它使用了哈希函数来计算元素的存储位置,查找元素的速度非常快。 6. HashMap类:实现了Map接口,基于哈希表实现的键值对集合。它可以根据键快速地查找对应的值,具有很高的查找效率。 Java集合提供了丰富的功能和操作方法,可以方便地进行元素的增删改查、遍历、排序以及集合间的操作,如并集、交集和差集等。它们的使用可以大大简化程序的编写和维护工作,提高代码的可读性和可维护性。 同时,Java集合还具有泛型的特性,使得集合类可以更加灵活地存储不同类型的数据。通过明确指定集合存储的元素类型,可以在编译时提供更好的类型检查,减少运行时错误的发生。 总之,Java集合Java程序开发中非常重要和常用的一个部分,它提供了丰富的功能和灵活的数据存储方式,可以满足各种需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游迹AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值