集合

被刻印的时光 ゝ 提交于 2019-12-06 15:12:33

collection

类型 interface

方法:

int size() 集合长度 (注意与数组长度.lengh属性 和String长度 .lengh()方法区别)

boolean isEmpty() 判断集合是否为空

boolean contains(Object o) 判断集合中是否存在object类型的元素o

Iterator<E> iterator() 迭代器用法见后面集合的遍历

boolean add(E e) 向集合中增加元素

boolean remove(Object o) 删除集合中的元素

void clear() 删除集合中所有元素

细节:

  1. 基本数据类型的泛型集合,必须使用包装类

集合为空的判断

  1. boolean isEmpty()为true

  2. int size() 值为0

  3. 使用了void clear()

list

类型 interface extends collection

特点:

  1. 有序的

  2. 有下标

  3. 可重复

方法: E get(int index) 获取指定下标元素

E set(int index, E element) 改变指定元素下标的值

int indexOf(Object o)

int lastIndexOf(Object o)

细节

  1. 集合的删除 int类型 如果删除传入int类型,会默认为集合的下标 如果一定要删除int类型的值,那么必须使用封装类

  2. 集合指定位置添加,添加不能超出原来集合的最大长度

  3. 查找集合中的某个值indexOf,lastIndexOf 返回指定数据第一次被查找到在集合中的下标,如果没有找到返回-1

底层是数组的集合

ArrayList

ArrayList list =new Arraylist();

Vector

Vector vector=new Vector();

Stack

Stack stack=new Stack();

ArrayList Vector Stack 的特点和区别

  1. 都是继承了List接口,方法和实现基本一样,底层都是通过数组实现。

  2. Stack 继承了 Vector ,两者都是线程安全的;ArrayList 没有考虑线程的问题。

  3. ArrayList 有一些算法做了优化,速度更快,效率更高。

底层是链表的集合

类型 类 extends AbstractSequentialList extends AbstractList implements List

方法:

E getFirst() / E getLast()

E removeFirst() / E removeLast()

addFirst(E e) / addLast(E e)

LinkedList list=new LinkedList();

ArrayList 和 LinkedList区别

1.1ArrayList底层是数组的实现,LinkedList底层是链表的实现 1.2在java中链表就是自己实现了一个类,在类中记录了前一个和后一个的地址 每次查找都需要找到前一个或者后一个才能往前或者往后找到 2.ArrayList查找速度快,但是删除和插入的速度慢 ​ 3.LinkedList删除和插入的速度快,但是查询速度较慢 4.LinkedList有自己独有的addFirst addLast removeLast removeFirst的方法

集合的遍历

1.for循环遍历 (只能遍历数组为底层的集合

for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));        }

2.通过迭代器打印

    Iterator it = linkedList.iterator();    while(it.hasNext()) {        Object obj = it.next();        System.out.println(obj);    }

3.增强for循环(foreach循环)

for(Object obj : set) {​System.out.println(obj);        }

Set

类型 interface extends collection

特点 :

1.没有重复(不报错,后面的内容会覆盖前面的)

2.没有下标

3.无序的

HashSet

以Hash值判断元素是否重复

new 两个相同类型 相同内容的对象的对象在 HashSet中不相等

Student s1 = new Student(1,"张三","成都");Student s2 = new Student(1,"张三","成都");​Set<Student> sets = new HashSet<>();        sets.add(s1);        sets.add(s2);

这时会把两个对象都放入sets集合

要想令两个对象相等,只能在Student类中重写hashcode方法

TreeSet

可以排序的set

加入的对象必须(实体类)实现comparable 接口中的compare to方法(一个参数)

返回 正 零 负数

public int compareTo(Student o) {        //注意,下面并不一定返回是1或者-1        //只要是正数或者负数就可以了        if(this.id > o.id) {            return 1;        }        else if(this.id < o.id) {            return -1;        }        else {            return 0;        }

 

集合的工具类

collections.sort();方法使用的两种方式

compareable 在 java.lang包下 实体类必须实现compareable

必须实现 在对象的实体类中compare to方法

comparator在java.util下 新建类必须实现comparator

必须实现compare方法

需要新建类或内部类来实现

 

import java.util.Comparator;​public class StudentCompare implements Comparator<Student>{    @Overridepublic int compare(Student o1, Student o2) {    if(o1 == null || o2 == null) {        return 0;    }    return o1.getId() - o2.getId();}}

范式

< > 规定集合中的数据类型

基本数据类型的范式必须是包装类

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!