Java集合的一些基本概念(集合的遍历,集合之间的区别等)

Java 集合概览

Java 集合,由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口:ListSetQueue

List, Set, Queue, Map 四者的区别?

  • List: 存储的元素是有序的、可重复的
  • Set: 存储的元素不可重复的。
  • Queue: 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的
  • Map: 使用键值对(key-value)存储,类似于数学上的函数 y=f(x),“x” 代表 key,“y” 代表 value,key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值

为什么要使用集合?

因为在实际开发中,存储的数据类型多种多样且数量不确定。Java 集合可以提高数据的存储和处理灵活性

为什么要使用集合?

与数组相比,Java 集合框架中的各种集合类和接口可以存储不同类型和数量的对象,同时还具有多样化的操作方式。相较于数组,Java 集合的优势在于它们的大小可变、支持泛型、具有内建算法等。
总之,Java 集合提高了数据的存储和处理的灵活性,可以更好地适应现代软件开发中多样化的数据需求

哪些集合类是线程安全的?哪些不安全?

线性安全的集合类:

Vector(比ArrayList多了同步机制)

Hashtable

ConcurrentHashMap:是一种高效并且线程安全的集合。

Stack:栈,继承于Vector。

线性不安全的集合类:
Hashmap

Arraylist

LinkedList

HashSet

TreeSet

TreeMap

集合遍历

  1. 使用增强for循环,size()和get(int index)结合
List<String> list = Arrays.asList("hangge","google","baidu");

for(String s : list) {

System.out.println(s);
}

如何遍历map键值对集合?使用map的keySet方法


for(String key : map.keySet()) {
    System.out.println(key  +map.get(key))
}
  1. 与 for-each 循环相比,使用 Iterator 的方式更加灵活,因为它允许手动控制迭代过程。例如在迭代过程中修改集合、跳过元素或在多个集合之间进行迭代
List<String> list = Arrays.asList("hangge", "google", "baidu");

Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {

  String s = iterator.next();

  if (s.equals("google")) {

    iterator.remove();

  }

}
  1. 可以使用 forEach() 方法来迭代列表的元素,这个方法在 Iterable 接口中定义。
List<String> list = Arrays.asList("hangge", "google", "baidu");

list.forEach(element -> {

  System.out.println(element);

});

数组转集合可能出现的坑

Arrays.asList()方法,我们可以使用它将一个数组转换为一个 List 集合。
1、Arrays.asList()是泛型方法,传递的必须是对象,而不是基本类型。当传入一个存储基本类型数据的数组时,Arrays.asList() 的真正得到的参数不是数组中的元素,而是数组对象本身!此时 List 的唯一元素就是这个数组
举例:

int[] myArray = {1, 2, 3};
List myList = Arrays.asList(myArray);
System.out.println(myList.size());//1(只有myArray这个对象)
System.out.println(myList.get(0));//数组地址值
System.out.println(myList.get(1));//报错:ArrayIndexOutOfBoundsException

解决方法:

Integer[] myArray = {1, 2, 3};//int化为Integer

2、使用集合的修改方法: add()remove()clear()会抛出异常。

List myList = Arrays.asList(1, 2, 3);
myList.add(4);//运行时报错:UnsupportedOperationException
myList.remove(1);//运行时报错:UnsupportedOperationException
myList.clear();//运行时报错:UnsupportedOperationException

原因:
Arrays.asList() 方法返回是 java.util.Arrays 的一个内部类这个内部类并没有重写这些方法。
如何正确的将数组转换为 ArrayList ?
1.

List list = new ArrayList<>(Arrays.asList("a", "b", "c"))

2、使用 Stream(推荐)

Integer [] myArray = { 1, 2, 3 };
List myList = Arrays.stream(myArray).collect(Collectors.toList());
//基本类型也可以实现转换(依赖boxed的装箱操作)
int [] myArray2 = { 1, 2, 3 };
List myList = Arrays.stream(myArray2).boxed().collect(Collectors.toList());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值