List接口

List接口

一、关于List集合

  • 在java.util包中,继承于Collection接口
  • 允许存放重复数据而且是有序存放(元素进入集合的顺序),通过元素的equals方法,来判断两个元素是否重复
  • 在集合中存在下标,通过下标访问其中的元素

二、常用方法

List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操 作集合的特有方法,例如:

  1. 往集合中添加元素:add(E)
  2. 根据下标获取元素:get(index)
  3. 移除一个元素:remove(index/obj)
  4. 重置某个元素的值:set(index,obj)
  5. 清空集合:clear()
  6. 获取当前集合中元素的个数:size()
  7. 判断是否包含某个元素:contains(obj)
  8. 获取某个元素在集合中的下标:indexOf(obj)
  9. 判断集合是否为空:isEmpty()
  10. 把List集合转换成数组:list.toArray()
  11. 遍历集合中的元素:iterator() -----使用迭代器
  12. 截取一个子集合:subList(index,index)
 List<String> list=new ArrayList<String>();
        //往集合中添加元素
        list.add("123");
        list.add("2324");
        list.add("eee");
        //根据下标获取元素
        String value = list.get(1);
        System.out.println(value);//2324
        //获取集合中元素的个数
        int size = list.size();
        System.out.println(size);//3
        //判断一个元素在集合中的下标
        int i = list.indexOf("123");
        System.out.println(i);//0
        //是否包含“2324”这个元素
        boolean boo = list.contains("2324");
        System.out.println(boo);//true包含,false则不包含
        //转成数组
        Object[] arr = list.toArray();
        System.out.println(arr);
        //重置某个元素
        list.set(1,"aaa");
        System.out.println(list);//[123, aaa,eee]
        //截取一部分
        List<String> newList = list.subList(1, 2);
        System.out.println(newList);//[aaa]不包含尾部

三、List接口的实现类ArrayList

ArrayList是基于数组实现的,底层是动态数组。无论任何类型的数据,存储进ArrayList之后,都会变成Object类型。

特点:元素增删慢,查找快,有序集合

  1. 创建ArrayList集合
ArrayList list=new ArrayList()

当我们使用构造方法创建一个对象时默认情况下ArrayList底层的数组初始化大小为10,当添加新元素时会先检测当前数组是否存满,如果存满,会新建一个新数组,将原有数组中的内容复制到新数组,继续存储。

  1. 基本操作
  • 在移除一个元素时,默认根据元素的下标移除,如果要移除一个整数元素,需要传入整数对象remove(new Integer())
 ArrayList list=new ArrayList();
        //没加泛型,可以添加任何类型的元素
        list.add("喜洋洋");
        list.add(123);
        list.add('c');
        list.add("abc");
        System.out.println(list);//[喜洋洋, 123, c, abc]
        //使用增强for循环遍历集合
        for (Object l:list) {
            System.out.println(l);
        }
        //使用迭代器
        Iterator iterator=list.iterator();
        while (iterator.hasNext()){
            Object next = iterator.next();
            System.out.print(next);//喜洋洋123cabc
        }
        //移除某个元素
        list.remove(2);
        System.out.println(list);//[喜洋洋, 123, abc]

        list.remove(new Integer(123));
        System.out.println(list);//[喜洋洋, abc]

四、List接口的实现类LinkedList

  1. java.util.LinkedList也是一个基于线性表的顺序存储
  2. java.util.LinkedList集合存储的结构是链表结构
  3. 有序集合,允许存储重复元素,查找慢,增删块
  • LinkedList集合的实现
LinkedList list=new LinkedList();
        list.add(1);
        list.add("w");
        list.add(true);
        list.add("123");
        list.add("猪猪侠");
        System.out.println(list.get(3));//获取一个元素  123

        //往前边添加一个元素
        list.addFirst("笨笨狗");
        System.out.println(list);//[笨笨狗, 1, w, true, 123, 猪猪侠]
        //往最后添加
        list.addLast(0);
        System.out.println(list);//[笨笨狗, 1, w, true, 123, 猪猪侠, 0]
        //删除下标为3 的元素
        list.remove(3);
        System.out.println(list);//[笨笨狗, 1, w, true, 123, 猪猪侠, 0]
  • 使用LinkedList实现栈结构

栈的结构特点:先进后出--------只有一个出口

 LinkedList stack=new LinkedList();
        //入栈 push方法实现
        stack.push(123);
        stack.push("ddd");
        stack.push('s');
        System.out.println(stack);//[s, ddd, 123]
        //pop方法,取栈顶元素,并将其移除
        Object pop = stack.pop();
        System.out.println(pop);//s
        System.out.println(stack);//[ddd, 123]
  • 使用LinkedList实现队列结构

队列的特点:先进先出------有两个出口

LinkedList queue=new LinkedList();
        queue.add(123);
        queue.add("sss");
        queue.add("哈哈哈哈啊");
        System.out.println(queue);//[123, sss, 哈哈哈哈啊]

        //poll方法,取队头元素,并移除
        Object poll = queue.poll();
        System.out.println(poll);//123
        System.out.println(queue);//[sss, 哈哈哈哈啊]
        
        //peek()方法。取第一个元素但不移除
        Object peek = queue.peek();
        System.out.println(peek);
        System.out.println(queue);

五、List接口的实现类Vector

  1. Vector的底层和ArrayList一样都是基于动态数组的。
  2. ArrayList和Vector的区别:ArrayList不是线程同步的,在多线程情况下可能会出现数据异常,如果要在多线程情况下使用该类则需要使用Collections. synchronizedList(new ArrayList())来实现外部同步。
  3. Vector是线程同步,在多线程情况下可以保证数据的正确性
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值