Java集合框架--LIST,ArrayList,LinkedList

List

Java集合框架中的List是一个有序且允许元素重复的集合接口 。它位于java.util包下, 继承自Collection接口。List集合中的元素按照插入的顺序进行排序, 并且可以通过索引来访问元素, 索引从0开始。List允许我们存储元素的集合,‌并且可以包含重复的元素,‌这些元素是有序的。‌下面是一些正确使用Java集合框架中List接口的基本指导原则:‌

1. 创建List实例

Java提供了多种List的实现,‌如、‌和等。‌每种实现都有其特点和适用场景。‌

List<String> list = new ArrayList<>(); // 使用ArrayList
// 或者
List<String> linkedList = new LinkedList<>(); // 使用LinkedList

2. 添加元素

List提供了多种添加元素的方法,‌包括、‌等。‌add(E element)  add(int index, E element)

list.add("Hello");
list.add(1, "World"); // 在索引1处插入"World"

3. 访问元素

可以通过索引访问List中的元素,‌使用方法。‌get(int index)

String element = list.get(0); // 获取索引为0的元素

4. 移除元素

可以使用或方法来移除元素。‌remove(int index)remove(Object o)

list.remove(0); // 移除索引为0的元素
list.remove("Hello"); // 移除第一个"Hello"元素(‌如果存在)‌

5. 遍历List

遍历List可以使用传统的for循环、‌增强的for循环(‌也称为"for-each"循环)‌或Java 8引入的方法结合Lambda表达式。‌forEach

‌传统的for循环‌:‌

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

‌增强的for循环‌:‌

for (String item : list) {
    System.out.println(item);
}

‌Java 8的forEach和Lambda表达式‌:‌

list.forEach(item -> System.out.println(item));

6. 排序和搜索

List可以转换为数组,‌使用方法。‌对于排序,‌如果List的元素实现了接口,‌可以使用方法进行排序。‌对于搜索,‌可以使用或方法查找元素的索引。‌

7. 注意事项

在多线程环境下,‌如果多个线程同时访问同一个List实例,‌并且至少有一个线程在结构上修改了列表,‌那么必须外部同步这个List。‌是同步的,‌但通常性能不如,‌因此在单线程环境下推荐使用。‌对于大量随机访问和添加/删除操作较少的场景,‌是较好的选择。‌如果频繁地在列表的开头或中间进行添加/删除操作,‌那么可能更合适。‌

ArrayList

在Java中,‌是一个非常常用的集合类,‌它实现了接口,‌并提供了基于动态数组的实现。‌以下是正确使用的一些基本指导原则:‌

1. 创建实例ArrayList

首先,‌你需要创建一个的实例。‌你可以指定元素的类型,‌这样可以在编译时期就进行类型检查。‌

ArrayList<String> list = new ArrayList<>();

这里,‌我们创建了一个存储类型元素的。‌

2. 添加元素

ArrayList提供了多种添加元素的方法,‌最常用的有和。‌add(E element)add(int index, E element)

使用在列表的末尾添加元素。‌add(E element)

list.add("Hello");
list.add("World");

使用在指定索引处添加元素,‌注意索引从0开始,‌且索引值不能超出当前列表的范围。‌

add(int index, E element)

list.add(1, "Java"); // 列表现在变为["Hello", "Java", "World"]

3. 访问元素

你可以通过索引来访问中的元素,‌使用方法。‌ArrayListget(int index)

String firstElement = list.get(0); // 获取第一个元素

4. 移除元素

ArrayList提供了和方法来移除元素。‌remove(int index)  remove(Object o)

使用移除指定索引处的元素。‌remove(int index)

list.remove(1); // 移除索引为1的元素,‌列表现在变为["Hello", "World"]

使用移除列表中第一个出现的指定元素。‌remove(Object o)

list.remove("Hello"); // 移除"Hello",‌如果列表中存在

5. 遍历ArrayList

遍历可以使用传统的for循环、‌增强的for循环(‌也称为"for-each"循环)‌或Java 8引入的方法结合Lambda表达式。‌

传统的for循环 :

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

增强的for循环 :

for (String item : list) {
    System.out.println(item);
}

Java 8的forEach和Lambda表达式 :

list.forEach(item -> System.out.println(item));

6. 注意事项

  1. ArrayList在添加或删除元素时,‌如果数组需要扩容,‌则可能会涉及到数组复制,‌这会影响性能。‌因此,‌在知道大概的元素数量时,‌可以使用的构造器指定初始容量。‌
  2. ArrayList不是线程安全的。‌如果你需要在多线程环境下使用,‌可以考虑使用(‌但通常不推荐,‌因为它比更慢)‌,‌或者使用将包装成线程安全的列表,‌或者使用包下的并发集合类。‌

LinkedList

LinkedList是Java集合框架中一个非常有用的类,‌它实现了接口和接口,‌提供了基于链表的数据结构。‌与不同,‌在添加或删除元素时不需要移动其他元素,‌因此这些操作在上通常更高效。‌但是,‌由于内部是通过节点(‌Node)‌来存储元素的,‌随机访问元素(‌通过索引访问)‌可能会比较慢。‌以下是一些使用的正确方法:‌

1. 创建实例LinkedList

你可以像创建其他集合一样创建的实例,‌指定元素的类型。‌

LinkedList<String> linkedList = new LinkedList<>();

2. 添加元素

LinkedList提供了多种添加元素的方法,‌包括在列表末尾添加、‌在列表开头添加以及在指定位置添加。‌

在列表末尾添加元素:‌

linkedList.add("Hello");

在列表开头添加元素(‌这是特有的高效操作)‌:‌LinkedList

linkedList.addFirst("First");

// 或者

linkedList.add(0, "First"); // 这在ArrayList中效率较低,‌但在LinkedList中效率较高

在指定位置添加元素(‌注意,‌这可能会比ArrayList慢,‌因为LinkedList需要遍历到该位置)‌:‌

linkedList.add(2, "Middle");

3. 访问元素

虽然支持通过索引访问元素,‌但这不是它最擅长的操作。‌如果你需要频繁地通过索引访问元素,‌那么可能是更好的选择。‌

String element = linkedList.get(0); // 获取第一个元素

4. 移除元素

LinkedList提供了多种移除元素的方法,‌包括移除第一个元素、‌最后一个元素、‌指定位置的元素或指定的对象。‌

移除并返回列表的第一个元素:‌

String firstElement = linkedList.removeFirst();

// 或者

String firstElementByIndex = linkedList.remove(0);

移除并返回列表的最后一个元素:‌

String lastElement = linkedList.removeLast();

移除指定位置的元素:‌

linkedList.remove(1); // 移除索引为1的元素

5. 遍历LinkedList

遍历可以使用传统的for循环、‌增强的for循环或Java 8引入的方法结合Lambda表达式。‌由于实现了接口,‌这些遍历方法都适用。‌

增强的for循环 :

for (String item : linkedList) {
    System.out.println(item);
}

Java 8的forEach和Lambda表达式 :

linkedList.forEach(item -> System.out.println(item));

6. 注意事项

  1. LinkedList不是线程安全的。‌如果多个线程同时访问一个实例,‌并且至少有一个线程从结构上修改了列表,‌那么它必须保持外部同步。‌LinkedList
  2. 尽管在添加和删除元素时通常比更高效,‌但在随机访问元素时可能较慢。‌因此,‌在选择使用还是时,‌应考虑你的具体需求。‌
  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

纣王家子迎新

有钱的捧个钱场,没钱的捧个人场

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

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

打赏作者

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

抵扣说明:

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

余额充值