List及ArrayList/LinkedList常用方法以及所有迭代方式

List
1.List集合是有下标的
2.List集合是有顺序的
3.List集合可以存放重复的元素
在这里插入图片描述
Collection基础方法复习+List常用方法测试

public class TestList {
    public static void main(String[] args) {
        //1.创建list的多态对象,注意list是接口,不可以实例化
        List<String> list=new ArrayList<>();
        //2.测试继承自Collection中单个集合的方法
        list.add("大娃");
        list.add("2娃");
        list.add("3娃");
        list.add("4娃");
        list.add("5娃");
        list.add("6娃");
        list.add("7娃");
        System.out.println(list);

        //list.clear();//清空集合
        System.out.println(list.contains("7娃"));//true,包含元素7娃
        System.out.println(list.isEmpty());//false,集合不为空
        System.out.println(list.remove("7娃"));//删除元素7娃
        System.out.println(list.size());//6,获取集合中元素的个数
        System.out.println(Arrays.toString(list.toArray()));//转为数组并打印

        //测试集合间的操作
        List<String>list2=new ArrayList<>();
        list2.add("1");
        list2.add("2");
        list2.add("3");
        list2.add("4");
        System.out.println(list2);
        list.addAll(list2);//把集合2的元素添加到集合1
        System.out.println(list);
        System.out.println(list.containsAll(list2));//判断集合一中属于集合2的所有元素
        list.removeAll(list2);//删除集合一中属于集合二的元素
        System.out.println(list);
        list2.retainAll(list);//仅仅保留集合2中两个集合的公共元素
        System.out.println(list);//没有发生改变
        System.out.println(list2);//[],变成空集,谁来调用影响谁

        //3.测试list集合独有的方法
        /*list接口是有下标的、有序的、可以存放重复元素的集合*/
        list.add("小蝴蝶");
        list.add(1,"蛇精");//在指定的索引处添加元素
        list.add(3,"小蝴蝶");//在指定的索引处添加元素
        System.out.println(list);

        System.out.println(list.indexOf("小蝴蝶"));//判断元素第一次出现的下标
        System.out.println(list.lastIndexOf("小蝴蝶"));//判断元素最后一次出现的下标
        System.out.println(list.remove(5));//根据下标删除元素,并把删除的元素返回
        System.out.println(list);
        System.out.println(list.get(3));//根据索引获取对应元素
        System.out.println(list.set(7,"蝎子精"));//根据索引修改指定位置元素
        System.out.println(list);

        list2.add("231");
        list2.add("231");
        list2.add("231");
        list.addAll(list2);
        list.addAll(1,list2);
        System.out.println(list);
    }

}

List集合迭代所有方式

/*本类用于进一步测试List接口迭代*/
public class TestList2 {
    public static void main(String[] args) {
        //1.创建list接口多态对象
        List<String> list = new ArrayList<>();
        //2.向集合中存入元素
        list.add("喜羊羊");
        list.add("懒洋洋");
        list.add("美羊羊");
        list.add("沸羊羊");
        list.add("小肥羊");
        list.add("肥牛卷");
        System.out.println(list);
        //3.测试集合的迭代
        /*集合的迭代方式
         * 1.for循环
         * 2.foreach循环
         * 3.iterator迭代器
         * 4.listIterator*/
        //方式1:因为list集合是有序的,元素是有下标的,所以可以根据下标进行遍历
        //从那开始 0  到那结束 list.size()-1 如何让变化 ++
        for (int i = 0; i < list.size(); i++) {
            //根据本轮循环到的下标值,获取集合中对应下标处的元素
            System.out.println(list.get(i));
        }
        System.out.println("**********************方式一********************");

        //方式2:因为普通for循环写法复杂,效率低,所以实用高效for循环
        //格式:for(每轮遍历到的元素类型 元素名:要遍历的数组/集合名){循环体}
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("**********************方式二********************");

        //方式3:使用的是从父接口Collection处继承过来的迭代器iterator
        Iterator<String> it = list.listIterator();
        while (it.hasNext()) {//只要hasNext()结果为true,说明还有下一个元素
            //打印本轮中迭代到的元素
            System.out.println(it.next());
        }
        System.out.println("**********************方式三********************");
        //方式四:使用list接口特有的迭代器ListIterator
        /*listIterator是list接口特有的迭代器
         * ListIterator<E>子接口--继承了父类的功能
         * listIterator还有自己的功能,比如逆序遍历,但并不常用*/
        ListIterator<String> it2 = list.listIterator();
        while (it2.hasNext()) {
            System.out.println(it2.next());
        }
        System.out.println("**********************逆序迭代********************");
        ListIterator<String> it3 = list.listIterator();
        while (it3.hasNext()) {//判断是否有下一个元素迭代
            System.out.println(it3.next());//打印当前迭代到的元素
            if (!it3.hasNext()) {//直到迭代器没有下一个元素可以迭代--到最后了
                System.out.println("开始逆序迭代");
                while (it3.hasPrevious()) {//判断是否有上一个元素可以迭代
                    System.out.println(it3.previous());//打印获取到的上一个元素
                }
                break;//终止循环,不然会一直从头到尾,再从尾到头迭代
            }
        }
    }
}

Arraylist的特点
1.List接口的实现类
2.底层数据结构是数组,内存空间是连续的
3.元素有下标,有序,允许存放重复的元素
4.通常可以根据下标进行操作
5.增删操作比较慢,查询比较快 [数据量比较大的时候]
Arraylist常用方法以及迭代

/*本类用于ArrayList的相关测试*/
public class TestArrayList {
    public static void main(String[] args) {
        /*底层会帮助我们创建数组用于存放对象,并且数组的初始容量是10
        * ArrayList底层是数组*/
        //1.创建对应的集合对象
        ArrayList<Integer>list=new ArrayList();
        //2.向集合添加元素
        list.add(100);
        list.add(200);
        list.add(300);
        list.add(400);
        list.add(400);
        list.add(300);
        System.out.println(list);

        //3.测试ArrayList常用方法
       //list.clear();//清空集合
        System.out.println(list);
        System.out.println(list.contains("100"));//false,是否包含String类型的元素”100“
        System.out.println(list.get(0));//100,获取集合中下标为0的元素
        System.out.println(list.indexOf(400));//获取元素第一次出现的索引
        System.out.println(list.lastIndexOf(400));//获取元素最后一次出现的索引

        System.out.println(list.remove(1));//根据下标删除集合中的元素
        //System.out.println(list.remove(300));//Integer集合.remove()整数的话默认为下标,此时会出现数组下标越界异常
        /*上面的代码会报错:数组下标越界:index 300,size 5
        * 主要是因为list中有两个重载的remove(),如果直接传入数字300
        * 会直接匹配int类型的index索引方法,而不会认为这是一个Integer类型的数据
        * 所以,如果想要根据指定元素删除数据,需要把int类型的数据手动装箱成Integer*/
        System.out.println(list.remove(Integer.valueOf(300)));//指定Integer类型集合元素删除,而非指定下标
        System.out.println(list);

        System.out.println(list.size());//获取集合的元素个数
        list.set(2,777);//修改下标2处的元素,值为777
        System.out.println(list);

        //1.使用for循环迭代集合
        System.out.println("方式1");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("方式2");
        for (Integer i:list){
            System.out.println(i);
        }
        System.out.println("方式3");
        Iterator<Integer> it = list.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        //4.使用list独有的迭代器listIterator
        System.out.println("方式4");
        ListIterator<Integer> it2 = list.listIterator();
        while (it2.hasNext()){
            System.out.println(it2.next());
        }
    }
}

LinkedList特点
1.List接口的实现类
2.底层的数据结构是链表,内存空间是不连续的
3.元素有下标,有序,允许存放重复的元素
4.通常进行首尾节点的操作比较多
5.增删操作比较快,查询操作比较慢[数据量比较大时]
注意:LinkedList的查询操作也不是都慢,首尾操作还是很快的
在这里插入图片描述
LinkedList常用方法

public class TestLinkedList {
    public static void main(String[] args) {
        //1.创建集合对象
        LinkedList<String>list=new LinkedList<>();
        //2.添加数据
        list.add("孙悟空");
        list.add("猪八戒");
        list.add("唐三藏");
        list.add("沙师弟");
        list.add("白龙马");
        System.out.println(list);
        //3.测试LinkedList独有方法
        list.addFirst("蜘蛛精");//向链表添加首元素
        list.addLast("玉兔精");//向链表添加尾元素
        System.out.println(list);

        System.out.println(list.getFirst());//获取链表中的首元素
        System.out.println(list.getLast());//获取链表中的尾元素

        System.out.println(list.removeFirst());//删除链表的首元素,并返回被删除的元素
        System.out.println(list.removeLast());//删除链表的尾元素,并返回被删除的元素
        System.out.println(list);
        //4。其他测试
        //创建新的集合
        LinkedList<String>list1=new LinkedList<>();
        list1.add("水浒传");
        list1.add("三国");
        list1.add("西游");
        list1.add("红楼梦");
        System.out.println(list1);
        System.out.println(list1.element());//获取首元素
        System.out.println(list1);
        /*别名:查询系列*/
        System.out.println(list1.peek());//获取首元素
        System.out.println(list1.peekFirst());//获取首元素
        System.out.println(list1.peekLast());//获取尾元素

        /*别名:新增系列*/
        System.out.println(list1.offer("易经"));//添加尾元素
        System.out.println(list1);
        System.out.println(list1.offerFirst("三体"));//添加首元素
        System.out.println(list1.offerLast("wa"));//添加尾元素
        System.out.println(list1);

        /*别名:移除系列*/
        System.out.println(list1.poll());//删除首元素
        System.out.println(list1);
        System.out.println(list1.pollFirst());//删除首元素
        System.out.println(list1.pollLast());//删除尾元素
        System.out.println(list1 );
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值