本文介绍: 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。List是一种常用的集合类型,它可以存储任意类型的对象,也可以结合泛型来存储具体的类型对象,本质上就是一个容器。与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。| getLast(): | 返回列表的最后一个元素。| removeLast(): | 删除并返回列表的最后一个元素。

List

List是一种常用的集合类型,它可以存储任意类型的对象,也可以结合泛型来存储具体的类型对象,本质上就是一个容器。

List中主要有ArrayList、LinkedList两个实现类

ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

常用方法

ArrayList和LinkedList通用

方法名 说明
public boolean add(要添加的元素) 将指定的元素追加到此集合的末尾
public boolean remove(要删除的元素) 删除指定元素,返回值表示是否删除成功
public E remove(int index) 删除指定索引处的元素,返回被删除的元素
public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
public E get(int index) 返回指定索引处的元素
public int size() 返回集合中的元素的个数
boolean contains(Object o) 如果此列表包含指定的元素,则返回 true
boolean addAll(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到此列表中,从指定的位置开始
void clear() 列表中删除所有元素
public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 创建集合
		List list = new ArrayList<>();

		// 添加元素
		list.add("hello");
		list.add("world");
		list.add("java");

		// public boolean remove(Object o):删除指定的元素,返回删除是否成功
		 System.out.println(list.remove("world"));//true
		 System.out.println(list.remove("javaee"));//false

		// public E remove(int index):删除指定索引处的元素,返回被删除的元素
		 System.out.println(list.remove(1));//world

		// IndexOutOfBoundsException
		 System.out.println(list.remove(3));

		// public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
		 System.out.println(list.set(1,"javaee"));//world

		// IndexOutOfBoundsException
		 System.out.println(list.set(3,"javaee"));

		// public E get(int index):返回指定索引处的元素
		 System.out.println(list.get(0));//hello
		 System.out.println(list.get(1));//world
		 System.out.println(list.get(2));//java
		// IndexOutOfBoundsException
		 System.out.println(list.get(3));

		// public int size():返回集合中的元素的个数
		 System.out.println(list.size());//3
		
		// 输出集合
		 System.out.println("list:" + list);//list:[hello, world, java]

		// boolean contains(Object o) 如果此列表包含指定的元素,则返回 true
		 System.out.println(list.contains("world"));//true
		 
		// boolean addAll(int index, Collection c) 
		//将指定集合中的所有元素插入到此列表中,从指定的位置开始
		List list2 = new ArrayList<>();
		//addall前list2
		System.out.println(list2);// []
		System.out.println(list2.addAll(0, list));// true
		//addall后list2
		System.out.println(list2);// [hello, world, java]
	}

ArrayList独有

方法名 说明
trimToSize() 将内部存储的数组大小调整为列表中元素的实际数量。
ensureCapacity(int minCapacity) 设置内部存储的数组大小,以容纳指定数量的元素。
toArray(T[] a) 将列表中的元素转换为指定类型的数组
//toArray(T[] a)将列表中的元素转换为指定类型的数组
public class Main {
    public static void main(String[] args) {
        List<Integer> list = List.of(12, 34, 56);
        Integer[] array = list.toArray(new Integer[3]);
        for (Integer n : array) {
            System.out.println(n);
        }
    }
}
遍历方法
for循环

最基础的遍历方式:for循环,指定下标位置,使用 List 集合的 get(i) 方法来获取元素。

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

较为简洁的遍历方式:for-each循环,只能顺序遍历,不能对某一个指定元素进行操作。(这种方法在遍历数组和 Map 集合的时候同样适用)

for (String str : list){
    System.out.println(str);
}
迭代器
Iterator<String> itr = list.iterator();
while(itr.hasNext()){
    String str = itr.next();
    System.out.println(str);
}
forEach + Lambda表达式
list.forEach((str)->{
    System.out.println(str);
});
List转化为Array
循环遍历集合
ArrayList<Integer> resList = new ArrayList<>();
Collections.addAll(resList,666,888,999);    
int[] res = new int[resList.size()];  

for (int i = 0; i < resList.size(); i++) {
    res[i] = resList.get(i);
}
System.out.println(Arrays.toString(res));
调用toArray无参方法。

返回类型为Object[]类型的数组,无法强制转换为其他类型(如 int[] 、String[]等)。

ArrayList<Integer> resArr = new ArrayList<>();
Collections.addAll(resArr,666,888,999);
   
Object[] objectArr = resList.toArray();
   
System.out.println(Arrays.toString(objectArr));
调用toArray(T[] a)有参方法

转换为指定类型的数组

//转换为integer类型数组
ArrayList<Integer> resArr = new ArrayList<>();
Collections.addAll(resArr,666,888,999);
Integer[] integersArr = resList.toArray(new Integer[resList.size()]);
System.out.println(Arrays.toString(integersArr));
   
//转换为character类型数组
ArrayList<Character> cList = new ArrayList<>();
Collections.addAll(cList,'s','d','b');
Character[] charactersArr = cList.toArray(new Character[cList.size()]);
System.out.println(Arrays.toString(charactersArr));
   
//转换为String类型数组
ArrayList<String> sList = new ArrayList<>();
Collections.addAll(sList,"hello","world");
String[] StringArr = sList.toArray(new String[sList.size()]);
System.out.println(Arrays.toString(StringArr));

LinkedList

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

链表可分为单向链表和双向链表。

一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。

img

一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。

img

Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

同ArrayList的区别

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
常用方法

部分和ArrayList相同,同上

方法名 说明
addFirst(E element) 将元素添加到列表的开头
getFirst(): 返回列表的第一个元素。
getLast(): 返回列表的最后一个元素。
removeFirst(): 删除并返回列表的第一个元素。
removeLast(): 删除并返回列表的最后一个元素。

— |
| addFirst(E element) | 将元素添加到列表的开头 |
| getFirst(): | 返回列表的第一个元素。 |
| getLast(): | 返回列表的最后一个元素。 |
| removeFirst(): | 删除并返回列表的第一个元素。 |
| removeLast(): | 删除并返回列表的最后一个元素。 |

原文地址:https://blog.csdn.net/m0_74267125/article/details/135488577

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_56278.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注