木舟0基础学习Java的第十三天(Collection集合框架)

Collection(根接口)集合框架

数组和集合的区别:

数组:既可以存储基本数据类型(值)又可以存储引用数据类型(地址值)

       长度:数组的长度是固定的不能自动增长

       使用环境:元素个数固定的时候

集合:只能存储引用数据类型(对象)也可以存储基本数据类型(存储基本数据类型会自动装箱)

       长度:集合的长度是可变的 随着元素的增加而增加

       使用环境:元素个数固定的时候


List和set的区别:

List:有顺序 有下标索引 存和取都是有序的 可以存重复的 

Set:无顺序 没有下标索引 不能存储重复值 存和取的顺序不能保证


Collection集合的基本功能:

Collection是接口 不能实例化 需要使用多态 接口引用指向间接子类对象

例:Collection c=new ArrayList();//多态 接口引用指向间接子类对象

添加:

c.add(元素);//基本数据类型 自动包装为包装类

c.addAll(c1);//添加所以c1的元素到c集合中

查询:显示集合元素个数

c.size();

查询:是否包含指定的元素

c.contains(指定的元素);//用boolean接收

c.containsAll(c1);//是否包含c1中的全部元素

移除:

c.remove(要移除的元素);//对象不可以这么移除

c.removeAll(c1);//从c中移除所有和c1有交集的元素(没有交接无法移除 保持原来的值)

c.retainAll(c1);//c与c1取交集 c中不是交集的元素被移除 保留交集的元素

清空集合:

c.clear();

判断:判断集合是否为空

c.isEmpty();

遍历:集合转数组遍历

Object[] obj=c.toArray();

for (int i = 0; i <c.size() ; i++) {

        System.out.println(obj[i]);

  }

独立拿到对象中的属性:集合中不能存在基本数据类型的元素

Object[] obj=c.toArray();

for(int i=0;i<obj.length;i++){

Student s=(Student) obj[i];//向下转型

System.out.println(s.getName()+" "+s.getAge()); }

迭代器遍历:

Collection c=new ArrayList();

通过对象返回一个迭代器

Iterator it=c.iterator();

   public static void main(String[] args) {
        Collection c=new ArrayList();
        c.add(3);
        c.add("你好");
        c.add(true);
        c.add(23.7);
        c.add(new Student("木舟",25));
        Iterator it=c.iterator();
        //判断it.hasNext是否存在   如果仍有元素可以迭代,则返回 true
       /* if(it.hasNext()){
            System.out.println(it.next());//it.next()返回迭代的下一个元素
        }*/
        while(it.hasNext()){
            Object obj = it.next();
            System.out.println(obj);
        }
    }

并发修改异常

public static void main(String[] args) {
        List l=new ArrayList();
        l.add("i");
        l.add("love");
        l.add("java");
        l.add("programing");
        //Iterator i=l.iterator();//并发修改异常(ConcurrentModificationException)
        ListIterator it=l.listIterator();//ArrayList扩展迭代器
        while(it.hasNext()){
            String s=(String) it.next();
            System.out.println(s);
            if(s.equals("java")){
                it.add("javaee");//添加 要加在迭代器中
            }
        }
        System.out.println(l);
    }

去重(对象去重要在对象类中重写equals方法)

 public static void main(String[] args) {
        ArrayList list=new ArrayList();
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("c");
        list.add("c");
        System.out.println(list);
        ArrayList single = getSingle(list);
        System.out.println(single);

    }
    public static ArrayList getSingle(ArrayList list){
        //去重方法
        //返回类型 ArrayList 参数类型ArrayList
        ArrayList newlist=new ArrayList();
        //老集合获取迭代器
        Iterator i=list.iterator();
        while(i.hasNext()){
            Object obj = i.next();//每个元素
            //如果新集合中没有老集合中的元素就添加
            if(!newlist.contains(obj)){
                newlist.add(obj);
            }
        }
        return newlist;
    }

链表

链表与数组的区别

数组:查询修改快 增删慢

链表:增删快 查询修改慢

总结

ArrayList:底层数据结构是数组 查改快 增删慢 线程不安全 效率高

Vector:底层数据结构是数组 查改快 增删慢 线程安全 效率低

LinkedList:底层数据结构是链表 查改慢 增删快 线程不安全 效率高

这三个不知道该用那个的时候就用ArrayList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值