java 集合集合是对象的容器,实现了对对象的常用的操作 , 类似数组功能 。和数组的区别:
- 数组长度固定,集合长度不固定
- 数组可以存储基本类型和引用类型,集合只能存储引用类型
- 使用时需要导入类
文章插图
Collection 继承 Iterable 接口,实现子类可放多个 object 元素,Collection 接口无直接实现类,是通过子类接口 Set 与 List 实现 。是单列集合的顶层实现接口,他表示一组对象,这些对象也称 Collectioin 的元素 。JDK 不提供此接口的任意直接实现,他提供更具体的子接口(如 Set 和 List)的实现 。
Listlist 集合是 collection 的子接口,元素有序,且添加顺序与取出顺序一致,支持索引 。
List 是一个接口,继承自 Collection 接口 。
List 是一个有序集合,用户可以精确的控制列表中的每一个元素的插入位置 。可以通过整数索引访问元素,并搜索列表中的元素 。与 Set 集合不同,列表通常允许重复元素 。List 集合特点:
- 有序
- 可重复
- add(index,E)指定位置添加元素
- remove(index)删除指定位置的元素
- set(index,E)修改指定位置的元素
- get(index)获取指定位置的元素
- List 集合的几种常用方法
List<> list = new ArraryList();list.add(obj)//末尾添加元素list.add(index,obj)//在指定位置添加元素list.remove(obj)//删除元素list.indexof(obj)//返回第一次出现的位置list.lastIndexOf(obj)//返回最后出现的位置list.set(indes,obj)//设置指定位置的元素,相当于替换list.get(index)//返回指定位置的元素list.contains(obj)//查找当前元素是否存在 。list.size()//返回list的长度list.clear()//清空集合list.isEmpty()//判断是否为空list.removeAll(list)//删除多个元素 。
ArraylistArrarylist 的底层维护了一个 Object 类型的 elementData 数组 , 其底层就是一个数组 。ArrayList 集合:可调整大小的数组的实现 List 接口 。实现所有可选列表操作,并允许所有元素,包括 null。
底层是数组 , 查询快,增删慢于 LinkedList 集合
- 无参构造扩容若使用无参构造,初始的 elementData 为 0,第一次添加元素,扩容为 10,若再次扩容,则扩容为 elementData 的 1.5 倍 。0->10->15->22....
- 有参构造扩容若使用 new Arrarylist(int n)初始化数组,则为指定大小 , 扩容时也是按照 elementData 的 1.5 倍
Vector 是线程同步的,是线程安全的,开发中若需要线程同步,用 Vextor 集合 。
LinkedListLinked 的意思是链接,字面意思来看,该集合是一个链表,事实也正是如此,LinkedList 的底层是实现了双向链表和双端队列 。可以添加任意的重复元素,包括 null 。由于是链表,所以不需要扩容,增删效率高 。
//链表实现演示public class Node {private Object item;//对象public Node first;public Node last;public Node(Object name) {this.item = name;}}
LinkedList 集合特有功能文章插图
LinkedList<String> link = new LinkedList<String>();link.add("hello");link.add("world");link.add("hello world");//添加元素link.addFirst("fist");link.addLast("last");System.out.println(link);System.out.println("------------------");//获取元素System.out.println(link.getFirst());System.out.println(link.getLast());System.out.println("------------------");//删除元素link.removeFirst();link.removeLast();System.out.println(link);System.out.println("------------------");
List 的最常用的三种遍历方法//以ArraryList为例 public static void main(String[] args) {List list = new ArrayList();List list = new ArrayList();list.add("11");list.add("12");//普通for循环for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}//增强forfor (Object o : list) {System.out.println(o.toString());}//iterator循环//通过列表迭代器添加元素,不会出现并发修改异常Iterator it = list.iterator();while (it.hasNext()) {System.out.println(it.next());} }
实例:将 Student 对象添加到集合,三种方式遍历Student student = new Student("张三",18);Student student2 = new Student("wangjiaqi",13);ArrayList<Student> array = new ArrayList<Student>();array.add(student);array.add(student2);//增强forfor (Student students : array) {System.out.println(students.getName()+students.getAge());}//迭代器Iterator<Student> it = array.iterator();while (it.hasNext()) {Student students = it.next();System.out.println(students.getName()+students.getAge());}//普通forfor(int i = 0; i < array.size(); i++){Student students = array.get(i);System.out.println(students.getName()+students.getAge());}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4 Java I/O:AIO和NIO中的Selector
- 3 Java I/O:NIO中的Buffer
- HILINK海联品牌集合店 : 雅诗兰黛各款面霜区别
- 一 JPA入门学习集合springboot
- Java程序员必会Synchronized底层原理剖析
- 通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端
- 1 Java I/O:模型与流
- 五 SpringBoot - Java8 新特性
- JetBrains Fleet初体验,如何运行一个java项目
- 【Java】Java中的零拷贝