18.ArrayList和LinkedList

18.集合类-ArrayList和LinkedList


18.1 知识点

Java中各集合类之间的关系

Java中的集合类就类似C#中的List和Dictionary的存在,主要用于批量存储对象,并且可以动态添加,动态删除。

Collection(接口)

  • Set(接口)
    • HashSet
    • TreeSet
  • List(接口)
    • ArrayList
    • LinkedList

Map(接口)

  • HashMap
  • TreeMap

Collection接口中的方法

  • add(E e): 添加元素
  • remove(Object o): 移除元素
  • clear(): 清空元素
  • isEmpty(): 是否为空
  • iterator(): 获取迭代器,可以用于遍历
  • size(): 集合中元素个数
  • contains(): 判断元素是否存在
  • toArray(): 将容器中元素转为数组

List接口中的方法

  • get(int index): 获取指定位置元素
  • set(int index, Object obj): 修改集合中指定位置的元素

ArrayList和LinkedList类

两者方法上的使用完全一致,因为它们继承相同的接口。区别在于:

  • ArrayList本质是数组,是顺序存储
  • LinkedList本质是链表,是链式存储

常用方法

  1. 初始化
ArrayList<String> list = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
LinkedList<String> linkedList = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
list2.add(1);
list2.add(2);
list2.add(3);
list.remove("3");
if (list.isEmpty()) System.out.println("list容器为空1");
list.clear();
if (list.isEmpty()) System.out.println("list容器为空2");//list容器为空2
//list.remove(2);
//如果我们的容器当中存储的是int类型 在移除的时候 我们只能通过索引移除
list2.remove(1);
System.out.println(list2.get(0));//1
System.out.println(list2.get(1));//3

if (list2.contains(2)) System.out.println("存在2元素");//不会打印
list2.set(0, 99);
System.out.println(list2.get(0));//99
  1. 遍历
  • for循环
for (int i = 0; i < list2.size(); ++i)
    System.out.println(list2.get(i));
    //            99
    //            3
  • foreach语句
for (Integer i : list2)
    System.out.println(i);
//            99
//            3
  • 迭代器
Iterator<Integer> it = list2.iterator();
while (it.hasNext()) System.out.println(it.next());
//            99
//            3
  1. 转数组
System.out.println("****************");
Integer[] ints = new Integer[2];
list2.toArray(ints);
for (Integer i : ints)
    System.out.println(i);
//            99
//            3

总结

Java中的ArrayList和LinkedList类似于C#中的List和LinkedList,根据自己的实际情况选择使用即可。


18.2 知识点代码

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class Lesson18_集合类_ArrayList和LinkedList
{
    public static void main(String[] args)
    {
        //知识点1:Java中各集合类之间的关系
        //Java中的集合类就类似C#中的List和Dictionary的存在
        //主要用于批量存储对象,并且可以动态添加,动态删除

        //              Collection(接口)
        //        __________|__________
        //       |                     |
        //      Set(接口)             List(接口)
        //    ___|____            _____|_____
        //   |        |          |           |
        //HashSet  TreeSet    ArrayList  LinkedList

        //           Map(接口)
        //    ________|_______
        //   |                |
        // HashMap         TreeMap




        //知识点2:Collection接口中的方法
        //1.add(E e) 添加元素
        //2.remove(Object o) 移除元素
        //3.clear() 清空元素
        //4.isEmpty() 是否为空
        //5.iterator() 获取迭代器,可以用于遍历
        //6.size() 集合中元素个数
        //7.contains() 判断元素是否存在
        //8.toArray() 将容器中元素转为数组



        //知识点3:List接口中的方法
        //1.get(int index) 获取指定位置元素
        //2.set(int index, Object obj) 修改集合中指定位置的元素



        //知识点4:ArrayList和LinkedList类
        //两者方法上的使用完全一致,因为他们继承相同的接口
        //区别:
        //ArrayList本质是数组,是顺序存储
        //LinkedList本质是链表,是链式存储

        //LinkedList在插入删除时效率高于ArrayList
        //ArrayList在访问集合中指定位置对象时效率高于LinkedList
        //常用方法:

        //1.初始化
        //非常类似C#中的List
        ArrayList<String> list = new ArrayList<>();
        ArrayList<Integer> list2 = new ArrayList<>();
        LinkedList<String> linkedList = new LinkedList<>();


        //2.增
        list.add("1");
        list.add("2");
        list.add("3");
        list2.add(1);
        list2.add(2);
        list2.add(3);


        //3.删
        list.remove("3");
        if (list.isEmpty()) System.out.println("list容器为空1");
        list.clear();
        if (list.isEmpty()) System.out.println("list容器为空2");//list容器为空2
        //list.remove(2);
        //如果我们的容器当中存储的是int类型 在移除的时候 我们只能通过索引移除
        list2.remove(1);


        //4.查
        System.out.println(list2.get(0));//1
        System.out.println(list2.get(1));//3

        if (list2.contains(2)) System.out.println("存在2元素");//不会打印


        //5.改
        list2.set(0, 99);
        System.out.println(list2.get(0));//99

        //6.遍历
        //三种方式
        //for循环
        for (int i = 0; i < list2.size(); ++i)
            System.out.println(list2.get(i));
            //            99
            //            3

        //foreach语句
        for (Integer i : list2)
            System.out.println(i);
        //            99
        //            3

        //迭代器
        Iterator<Integer> it = list2.iterator();
        while (it.hasNext()) System.out.println(it.next());
        //            99
        //            3


        //7.转数组
        //Object[] objs = list2.toArray();
        System.out.println("****************");
        Integer[] ints = new Integer[2];
        list2.toArray(ints);
        for (Integer i : ints)
            System.out.println(i);
        //            99
        //            3




        //总结
        //Java中的ArrayList和LinkedList类似
        //C#中的List和LinkedList
        //根据自己的实际情况选择使用即可
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏