单列集合

用Collection来创建ArrayList集合对象(父类接口不能保障有序性)

Collection<Integer> c = new ArrayList<Integer>();

常用方法

.add()----插入元素

remove()----删除元素,根据hashcode和equals来删除,如果没有重写这两个方法,是根据地址来操作。

.lear()----清除所有元素

.isEmpty()----判断是不是空元素。

.contains(***)---判断是否包含元素。

.addAll(----)---添加某集合到该集合中

.containsAll(----)-----看是不是包含这个集合的所有元素

迭代器 Iterator(接口)

//1.获取当前集合的迭代器对象
        Iterator<User> iu = cu.iterator();
        //2.调用方法判断是否有下一个元素
        while(iu.hasNext()){
            //3.获取当前元素 保存起来 并且 指针下跳
            User u = iu.next();
//            u.name = "000";
            System.out.println(u);
        }

迭代器和增强for循环的区别:

image-BryP.png

迭代器删除

iu = cu.iterator();
        while(iu.hasNext()){
            User u = iu.next();
            if(u.name.equals("aaa")){
//                cu.remove(u);//ConcurrentModificationException//并发异常
//                break;
                iu.remove();//调用迭代器自身的删除方法 不会触发并发异常
            }
        }

数组与集合转换

 User[] us = new User[cu.size()];
        cu.toArray(us);//集合转数组

        System.out.println(Arrays.toString(us));

        System.out.println();
        //数组转集合
        List<User> lu = Arrays.asList(us);
        lu.forEach(o-> System.out.println(o));

ArrayList

底层为数组模型,默认长度为10

优点:数组模型 元素是连续的 可以直接通过下标获取某个元素(查询快)

缺点:1.每次扩容 老数组成垃圾数据2.新增 删除 都需要元素移动(增删慢)

常用方法

方法名 返回值 注意事项
add(int index, E element) index>=0 index<=size()
addAll(int index, Collection<? extends E> c) boolean index>=0 index<=size()
remove(int index) E 返回被删除的元素
set(int index, E element) E 使用第二个参数替换第一个参数下标位的元素 返回被替换的老元素
get(int index) E 数组名[下标]
indexOf(Object o) int 根据元素对象的hashCode() equals()判断 找不到 返回 -1
listIterator()(无参迭代器) ListIterator 向迭代器 默认从头号元素开始迭代
listIterator(int index)(有参迭代器) ListIterator 从某个下标位开始向左迭代 应该存放起始下标+1

双向迭代器 ListIterator

ListIterator 集合对象.listIterator()
ListIterator 集合对象.listIterator(int startIndex)

常用方法

方法名 返回值 功能
hasNext() boolean 判断有没有下一个元素
next() E 获取下一个元素 并且模拟指针下跳
hasPrevious() boolean 判断有没有上一个元素
previous() E 获取上一个元素
remove() 删除当前元素

LinkedList

双链结构,查询慢 增删快

常用方法

方法名 返回值 功能
addFirst(E e) 添加元素在第一个
addLast(E e) 添加元素在最后一个
getFirst() E 获取第一个元素并返回
getLast() E 获取最后一个元素并返回
removeFirst() E 删除第一个元素并返回
removeLast() E 删除最后一个元素并返回

TreeSet、HashSet

无序集合,将有序集合转换成有序集合会自动去重。

若采用比较器接口的方式就可以避免去重

public class Test1 {
    public static void main(String[] args) {
        ArrayList<String> as = new ArrayList<String>();
        as.add("dsgs");
        as.add("fdad");
        as.add("dsgs");
        as.add("khjd");
        as.add("qwer");
        //将集合中的元素转存入TreeSet 保证按字母表顺序保存 并保留重复字符串
        TreeSet<String> tree=new TreeSet<String>((o1,o2)->-1);
        for (String s : as) {
            tree.add(s);
        }
        System.out.println(tree);
    }
}

stream流可以进行过滤操作