当前位置: 首页 > article >正文

Java学习第十二天--集合

目录

List集合(collection接口)

1.1ArrayList定义

1.2方法

2.1集合+泛型定义

 2.2方法

3.1LinkedList定义

3.2方法

4.1Vatory定义

4.2方法 

5.数组转集合注意事项

6.总结


集合

一个长度可变的容器。

List集合(collection接口)

List是一个有序的集合(也称为序列),底层是数组 自动扩容 初始容量10,它允许存储重复的元素。默认支持存储任意数据类型(引用数据类型,不支持基本数据类型)用户可以精准控制列表中每个元素的插入位置,并且通过索引0访问元素。

1.1ArrayList定义

由于底层是靠数组完成的数据存取,所以查询效率高(根据 index 查询),增删效率低。

1.2方法

package com.hualan.listDemo;
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
    public static void main(String[] args) {
        //1.创建集合对象 初始容量是10
            如果容量不足,扩容原有的1.5倍,如果1.5之后空间仍不足,扩容为所需的最小容量
        List list = new ArrayList();
        //2.增加元素 引用数据类型
        list.add("hello");
        list.add(12.3);//基本数据类型会自动装箱
        list.add("郭玉洁");
        //3.查询数据 根据索引下标 找到指定位置的元素
        //System.out.println(list.get(0));
        //4.根据下标更改数据
        //list.set(0,"你好");
        //5.获取数据
       // System.out.println(list.get(0));
        //6.移除某个元素
        list.remove(0);
        //System.out.println(list.get(0));
        list.remove("郭玉洁");
        //7.移除全部元素
        list.removeAll(list);
        System.out.println(list.size());
        //有序 新增的顺序和查询顺序保持一致
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //增强for循环(底层使用了迭代器)
        for(Object o : list){
        System.out.println(o);
        }
        //迭代器
        Iterator it = list.iterator();
        while(it.hasNext()){//判断迭代器中是否还有元素
        Object obj = it.next();//指针下移 获取当前元素
        System.out.println(obj);
}
        
    }
}

2.1集合+泛型定义

 规定集合中只能存储一种数据类型,避免运行过程中类型转换导致的异常

 2.2方法

package com.hl.listDemo;
import java.util.ArrayList;
import java.util.List;
/*
集合 + 泛型(规定集合中只能存储一种数据类型,避免运行过程中类型转换导致的异常)
*/
public class ArrayListDemo4 {
public static void main(String[] args) {
//泛型 <>
List<Object> list = new ArrayList<>();
list.add("a");
list.add(11);
list.add(new Student());
//要求集合中只能存储特定的数据类型
List<Student> list2 = new ArrayList<>();
list2.add(new Student());
//list2.add("1111");//编译错误
List<Student> list3 = new ArrayList<Student>();
//查询
for(Student stu:list2){
System.out.println(stu.getName());
}
//for object
for(Object obj:list){
Student stu = (Student)obj;
System.out.println(stu.getName());
}
}
}
class Student{
private String name;
public String getName() {
return name;
}

3.1LinkedList定义

linkedList 底层是双向链表
LinkedList 底层为链表 不牵涉初始容量和扩容机制
LinkedList 底层是双向链表和队列结构
队列 队头 队尾
LinkedList 有序,可以重复

3.2方法

package com.hualan.listDemo;
import java.util.LinkedList;
public class LinkedListDemo1 {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.add("hello");
        list.add("world");
        list.add("java1");
        list.add("java2");
        //在队头新增
        list.addFirst("java3");
        //在队尾新增
        list.addLast("java4");
        System.out.println(list);
        System.out.println(list.contains("java1"));
        System.out.println(list.indexOf("java1"));
        //获取第一个元素
        System.out.println(list.get(0));
        System.out.println(list.peek());
        System.out.println(list);
        //删除第一个元素
        System.out.println(list.remove(0));
        System.out.println(list.pop());
        System.out.println(list);
    }
}

4.1Vatory定义

Vector 实现类,它和 ArrayList 相似,唯一的区别是, Vector 在多线程环境下是安全的,但访问效率低。

4.2方法 

//线程安全 效率低 底层是数组
Vector<String> v = new Vector();
v.add("aaaaaa");
//线程不安全 效率高
List list = new ArrayList();
list.add("aaaaaa");
//创建一个线程安全的ArrayList对象
List list2 = Collections.synchronizedList(new ArrayList());

5.数组转集合注意事项

package com.hl.list;
import java.util.Arrays;
import java.util.List;
public class ArrayListDemo {
public static void main(string[] args){“f“子;string[] array ={"a","b","c"."'d","e"//数组转集合 转换之后的集合,长度固定,不支持自动扩容(不支持新增和删除)List<string>list=Arrays.asList(array);
//查询
system.out.printin(list):
//新增
//list.add("g");//java.lang.unsupportedoperationException
//删除
list.remove(1);//java.lang.unsupportedoperationException

6.总结

Collection是单值集合,它可以细分为有序(有下标)可重复集合(List),和不可重复集合Set

List是有序可重复集合,有下标的概念,它除了具有Collection全部的功能外,添加了和index相关的方法。

ArrayList实现类,底层数据结构是数组,它的特点是按下标查找元素快,但是插入元素,删除元素效率低,因为需要移动数据。

LinkedList实现类,底层数据结构是双向链表,它的特点是插入、删除元素效率高,根据下标找元素效率低。

Vector实现类,它和ArrayList相似,唯一的区别是,Vector在多线程环境下是安全的,但访问效率低。

增强for循环或者迭代器 边迭代边删除 出现并发修改异常问

解决此问题需要 同步删除 迭代器中元素和list中的元素


http://www.kler.cn/a/589867.html

相关文章:

  • 嵌入式八股RTOS与Linux---前言篇
  • MySQL InnoDB引擎的锁机制详解
  • OceanBase 用户问题精选答疑:OceanBase 版本升级解析
  • 电机控制常见面试问题(十五)
  • 算法-除自身以外数组的乘积
  • 美容院如何通过数据分析降低顾客流失率
  • Apache Shiro 使用教程
  • 拥有一台云服务器能做什么呢?
  • stm32week7
  • AMBA-CHI协议详解(二十二)
  • 【最大异或和——可持久化Trie】
  • STM32输入捕获采集超声波模块HC-SR04响应的高电平
  • 自动化APP测试APPium的元素等待
  • Django Rest Framework 创建纯净版Django项目部署DRF
  • Android Fresco 框架缓存模块源码深度剖析(二)
  • 爬虫代码中需要设置哪些HTTP头部信息?
  • 在遇见— 再遇见
  • docker入门篇
  • Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(一)
  • WPF窗口读取、显示、修改、另存excel文件——CAD c#二次开发