collection集合总结

Collection
list 有序 带索引,通过索引就能够精确查找元素,元素 可以重复
增加:add(element) add(index,element):方便摘要
删除:remove(element) remove(index)
修改:set(index.element)
查询:get(index)
|-Vector 也是一个可增长的数组结构,同步的,查询速度慢,增删速度更慢
|--ArrayList 数组结构 长度不可变(原理就是创建新数组+复制数组)查询速度很快,增删慢,不同步的
|--LinkList 链表结构 不同步 增删速度慢 查询速度快
        队列:先进先出 First in First Out fifo
        堆栈:先进后出 First In last Out Filo
|set 不包含重复元素的集合 而且方法和Collection一致
|hashSet  哈希表结构,不同步,保证元素的唯一性依赖HashCode()和equals()查询速度快
|treeSet 可以对set集合中的元素进行排顺
List可以 存储重复元素,如果需求中要求容器中的元素必须保证唯一性

 

需求1:
20 Student   数组  

 Student[] stus = new Student[20];
 
 需求2:
 数组的长度是固定  
 创建一个新数组,将原来的数组中的元素 复制到新数组中
 
 
 集合 
 当数据多了需要存储,需要容器,而数据的个数还不确定,无法使用数组,这时候可以使用java中的另一个容器--- 集合 

集合和数组有什么区别?
数组:长度是固定的 ,数组中存储的是同一类型的元素  ,存储基本数据类型值
集合:长度是可变的,存储对象,而且对象类型可以不一致

什么时候用集合呢?   
解决当对象多的时候,先进行存储,非常方便的存储方式


在1.2版为了更多的需求,出现了集合框架,有了跟多的容器来完成不同的需求

容器的区分按照数据结构来区分

不断向上抽取的过程中,出现体系,就形成了集合框架  最顶层:Collection接口 (看顶层,用底层)

总结:
学习体系:看顶层,用底层  
一个容器应该具备什么:添加元素,删除元素,


Collection 
    |--List  有序,带索引,通过索引就能够精确的查找元素,元素可以重复
    增加:add(element) add(index,element);方法摘要 
     删除:remove(element) remove(index) 
     修改 :set(index.element)
    查询:get(index)
    
    |--Set


 

 

package ArrayList;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Demo01 {

    public static void main(String[] args) {
        

    //构造一个初始化为十的空列表.ArrayList就会出现实现,数组是具有索引的
    List list = new ArrayList();
    ArrayList list1 = new ArrayList();
    //可以去添加不同的数据类型 但通常都会写一样的 数据
    list.add(1);
    list.add(4);
    list.add(3);
    list.add(4);
    
    list1.addAll(list);
    System.out.println(list);
    System.out.println(list1);
    
    //有序的
    for (int i = 0; i < list.size(); i++) {
        
    }
    System.out.println(list);
    //是可以在迭代器中修改元素的
    ListIterator it = list.listIterator();
    //不能再迭代器的过程中修改元素
    while (it.hasNext()) {
        int num =(int)it.next();
        if(num == 3)
            it.add(10);
        System.out.println(it.next());
                }
    System.out.println(list);
    
    //这种方式会多一点 迭代器
    for (Iterator it1 = list1.iterator(); it1.hasNext();) {
            int num =(int)it1.next();
            if(num==3)
                list.add(10);
            System.out.println(num);
                }
    System.out.println(list);
            }
    //toArray为啥要有这个方法 因为集合是可变得 转成数组就是为了不可变
    int[] arr ={1,2,3,4};
    //大坑小心
    List list2 =Arrays.asList(arr);//数组转成集合 方便去添加 会有一场
    
    //java.lang.UnsupportedOpenrationException
    //list2.add(5);
    Object[] arr2 = list2.toArray();//集合转成数组 不让在修改
    }

 

//=============================================================

package com.tz.api.list;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import com.tz.domain.Student;

public class ListDemo {
    
    public static void main(String[] args) {
        List list = new  ArrayList();
        
        //1.娣诲姞鍏冪礌
        list.add(new Student("xxs",21));
        list.add(new Student("xxs01",22));
        list.add(new Student("xxs02",23));
        list.add(new Student("xxs03",24));
        
        //鎻掑叆鍏冪礌
        list.add(1,new Student("xbb", 18));
        //鍒犻櫎鍏冪礌
        list.remove(3);
        for (Iterator it = list.iterator(); it.hasNext();) {
            Student stu =(Student) it.next();
            System.out.println(stu);
        }
        //淇敼鍏冪礌
        list.set(1, new Student("xxs04",25));
        for (int i = 0; i < args.length; i++) {
            System.out.println("get("+1+"):"+list.get(i));
        }
    //    Object obj= list.get(1);
        //System.out.println(obj);
    }
}
//================================================================================

package com.tz.api.list;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorDemo {

    public static void main(String[] args) {
        //1.创建List
        List list =new ArrayList();
        list.add("xxs");
        list.add("xxs02");
        list.add("xxs03");
        list.add("xxs04");
        ListIterator it = list.listIterator();//获取列表迭代器对象
        while(it.hasNext()){
            Object obj = it.next();
            if ("tanzhou2".equals(obj)) {
                it.set("java");
                list.add("java");
                /**
                 * 引发ConcurrentModificationException在迭代器过程中集合的方法对元素进行了
                 * 操作,导致并不知道集合中的变化,容易引起数据的不确定性
                 * 为了避免异常 使用迭代器的方法操作
                 * 发生Iterator有一个接口ListIterator可以解决可这个问题如何去获取该对象 的儿子接口额怒对象
                 */
            }
        }
        System.out.println(list);
        
    }
}
//==========================================

ArrayList   与LinkedList

哈希表结构

package com.tanzhou.set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import com.tanzhou.domain.Student;

public class SetDemo {

    public static void main(String[] args) {
        Set set = new HashSet();
//        set.add("java");
//        set.add("haha");
//        set.add("xixi");
//        set.add("haha");
//        set.add("tanzhou");
//        set.add("haha");
//        set.add("xixi");
        /*
         为什么学生对象没有保证唯一性呢?
         通过对哈希表的分析,发现存储元素是先调用了元素对象的hashCode(),而每个学生对象都是新建立的对象,所以hashCode值都不相同,
         也就不需要判断equals();
         如果想保证学生对象的唯一性 就不能够使用object中的hashCode() ,需要重新定义hashCode()的算法内容
         */                    
        set.add(new Student("小一1",22));
        set.add(new Student("小一2",21));
        set.add(new Student("小一3",24));
        set.add(new Student("小一4",23));
        set.add(new Student("小一5",23));
        
        
        for (Iterator it = set.iterator(); it.hasNext();) {
            System.out.println(it.next());
        }
        
    }
}

//=================================================

package com.tanzhou.list.subclass;

import java.util.LinkedList;

public class LinkedListDemo {

    public static void main(String[] args) {
        
        LinkedList link = new LinkedList();
        link.addFirst("a1");
        link.addFirst("a2");
        link.addFirst("a3");
//        System.out.println(link.getFirst());
        
//        System.out.println(link.removeFirst());
//        System.out.println(link.removeFirst());
//        System.out.println(link.removeFirst());
//        System.out.println(link.removeFirst());//java.util.NoSuchElementException
        while(!link.isEmpty()){//判断集合是否为空
            System.out.println(link.removeLast());
        }
        
    
    }
}
//===================================================

package com.tanzhou.set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import com.tanzhou.domain.Student;

public class SetDemo {

    public static void main(String[] args) {
        Set set = new HashSet();
//        set.add("java");
//        set.add("haha");
//        set.add("xixi");
//        set.add("haha");
//        set.add("tanzhou");
//        set.add("haha");
//        set.add("xixi");
        /*
         为什么学生对象没有保证唯一性呢?
         通过对哈希表的分析,发现存储元素是先调用了元素对象的hashCode(),而每个学生对象都是新建立的对象,所以hashCode值都不相同,
         也就不需要判断equals();
         如果想保证学生对象的唯一性 就不能够使用object中的hashCode() ,需要重新定义hashCode()的算法内容
         */                    
        set.add(new Student("小一1",22));
        set.add(new Student("小一2",21));
        set.add(new Student("小一3",24));
        set.add(new Student("小一4",23));
        set.add(new Student("小一5",23));
        
        
        for (Iterator it = set.iterator(); it.hasNext();) {
            System.out.println(it.next());
        }
        
    }
}
 

//=================================================

package com.tanzhou.set;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class TreeSetDemo {
    
    public static void main(String[] args) {
        
         Set set = new TreeSet();
         set.add("abc");
         set.add("tanzhou");
         set.add("java");
         set.add("xixi");
         set.add("aaa");
         for (Iterator it = set.iterator(); it.hasNext();) {
            System.out.println(it.next());
            
        }
         
    }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值