Java容器类型以及使用方法(1)

 

目录

系列文章目录

前言

一、Collection是什么?

二、Collection的使用方法以及性质

1.性质

2.Collection的常用使用方法

3.Collection遍历方法

2) 迭代器遍历

3 普通for遍历

4.Collections工具类常用方法

5.Set和List的比较

6.List的常用方法

总结


前言

我们知道Java容器一节有很多类或者接口

本文先浅谈一下Collection集合的使用方法以及细节处理​​​​​​​


 一、Collection是什么?

Collection是属于容器Iterable的一种,与Map平级,下设分两种类型 ,Set和List接口,集合只要是分两组(单列集合,双列集合),Set和List接口是实现子类的单列集合,Collection作为容器,可以存放任何类的元素(在没有使用泛型的情况下),可以同时加进去int ,Double,String等类型,行为方式比数组更加方便灵活,不需要设定空间大小,这一点很重要,也就是说可以存放任意数量的元素(理论上)

/*
Iterable<-Collection
作为接口指向Collection  有Set和List连接Collection接口
Collection<--Set  和Collection<--List
Set下设TreeSet和HashSet  指向接口Set
Set<--TreeSet   和  Set<--HashSet


List  下设接口Vector 和ArrayLinkedList和ArrayList
List <--Vector
List <--ArrayLinkedList
List <--ArrayList
 */

二、Collection的使用方法以及性质

1.性质

//1.Collection实现子类可以存放多个元素,每个元素可以是Object
//2.有些Collection的实现类,可以存放重复的元素,有些是不可以 的
//3.有些Collection的实现类,有些是有序 的(List),有些不是有序(Set)
//4.Collection接口没有直接实现的子类,是通过它的子接口Set和List来实现

2.Collection的常用使用方法


        //Collection的常用方法
        //1.add  添加
        List list = new ArrayList();
        list.add("添加方法: add()");//添加单个元素
        list.add(10);//相当于collection.add(new Integer (10));
        list.add(true);
        System.out.println(list);//[添加方法: add(), 10, true]
        //2.list.remove(0);//删除第一个元素
        list.remove(true);//删除指定对象
        System.out.println(list);//
        //3.contains:查找指定元素是否存在
        System.out.println(list.contains(10));//true
        //4.isEmpty 判断是否为空
        System.out.println(list.isEmpty());//false
        //5.clear  清空  清空对象中所有的元素
        list.clear();
        System.out.println(list);//打印为:[]
        //6.addAll  添加多个元素  list.addAll(Collection e) 表示添加的是一个集合内容,所以为添加多个元素
        ArrayList arrayList=new ArrayList();//list中的元素已经使用clear清空
        arrayList.add("红楼梦");
        arrayList.add("三国演义");
        list.addAll(arrayList);
        System.out.println(list);//输出为: [红楼梦, 三国演义]
        //7.containsAll 你查看多个元素是否存在 list.containsAll(Collection e)  判断list中是否存在Collection e的多个元素
        System.out.println(list.containsAll(arrayList));//true
        //8.removeAll  同时删除多个元素   list.removeAll (Collection e),删除list中
       list.add("西游记");
       list.removeAll(arrayList);
        System.out.println(list);//[西游记]

3.Collection遍历方法

1)  增强for方法  ,这个方法是在这三种方法中最为简便的一种方法,执行起来只需要三行代码

如:for(Object book:col)  其中book是任意起名的,相当于 Object book=(Object)col;意思为,讲Collection中的元素col向上转型给Object的对象book,然后进行遍历

  public static void main(String[] args) {
        Collection col = new ArrayList();
        col.add(new Book("红楼梦", "曹雪芹", 50.0));
        col.add(new Book("西游记", "曹吴承恩", 100));
        col.add(new Book("三国演义", "罗贯中", 120.0));
        col.add("mark");

        //使用增强for循环   底层也是用迭代器  可以理解为简化版的迭代器
        for(Object book:col){
            System.out.println(book);
        }
       //增强for也可以直接在数组使用
        int[]num={1,2,3,4};
        for (int i:num){          //int 为数组类型  ,i自定义的名字,num对应的数组名
            System.out.println("i="+i);
        }
       //快捷键  I  直接回车

    }

2) 迭代器遍历

    List list=new ArrayList();
        list.add(new Dog("xiaohuang", 12));
        list.add(new Dog("xaiolan", 10));
        list.add(new Dog("xiaohong", 8));
        list.add("xiaoming");
        Iterator iterator=list.iterator();

        //迭代器遍历方法
        while(iterator.hasNext()){
            Object obj=iterator.next();//进入iterator的运行类型Dog
            System.out.println(obj);

        }

3)普通for遍历

     //普通for方法
        for (int i = 0; i <list.size() ; i++) {
            System.out.println(list.get(i));
        }

4.Collections工具类常用方法

主要是用于排序和正删改查

1.排序有sort方法  由COllections.sort(容器名)得到的是正常字典顺序的排序,就是数字升序,字母是按照字母表升序,如果第一个字母相同根据sort内部的Comparable接口的CompareTo方法进行排序。

2.可以选择自定义排序方法

如  :    其中new Comparator是接口,在里面重写自己的方法Compare方法传入两个形参 Object类进行比较,在Compare方法中自定义比较形式

Collections.sort(list, new Comparator() {

    @Override
    public int compare(Object o1, Object o2) {
        return ((String) o1).length() - ((String) o2).length();
    }//根据字符串大小进行排序
});
public class CollectionSetting {
    public static void main(String[] args) {
        //Collections  工具类
        //1.
        //创建 ArrayList  集合 用于测试
        List list = new ArrayList();
        list.add("tome");
        list.add("micker");
        list.add("why");
        list.add("wjq");
        list.add("wjq");
        System.out.println(list);
        //reverse(List) :反转List中的元素顺序
        Collections.reverse(list);
        System.out.println("list: " + list);
        //shuffle(list) :对list集合元素进行随机排序

        for (int i = 0; i < 5; i++) {
            Collections.shuffle(list);
            System.out.println("第" + i + "次:  " + list);
        }
        //sort(List):根据元素的自然顺序对指定List集合元素按升序排序
        Collections.sort(list);
        System.out.println("自然排序后...");
        System.out.println("list: " + list);
        //sort(List,Comparator)  :根据指定的Comparator进行比较
        //传入一个比较器
        //List 允许重复  如果长度相同或者字符串相同(根据比较器来) 也可以放进去 ,但是对于Set来说不允许重复 不能放进去

        Collections.sort(list, new Comparator() {

            @Override
            public int compare(Object o1, Object o2) {
                return ((String) o1).length() - ((String) o2).length();
            }//根据字符串大小进行排序
        });
        System.out.println("list根据字符串大小进行排序: " + list);
        //swap(List,int,int)  //将指定位置的List集合中的i 和j进行交换
        //如果int越界  会抛出异常


        /**
         * 第二组  查找
         */
        //Object max(Collection) :根据元素的自然顺序,返回给定集合中的最大元素

        System.out.println("自然排序的最大元素:" + Collections.max(list));
        //max(Collection,Comparator):根据比较器需求得到排序之后的最大值
        Object max = Collections.max(list, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return ((String) o1).length() - ((String) o2).length();
            }
        });
        System.out.println("比较长度之后的list:" + max);
        //Object min  与上面的  max一样


        //int frequency(Collection Object) :返回指定集合中的指定元素出现的次数
        System.out.println("容器中出现指定元素的次数"+Collections.frequency(list, "wjq"));
        //void copy(List dest,List src)  :将后面的容器copy给前面的容器

        //不能直接将后面的容器copy给前面的空容器   会抛出异常
//        ArrayList list1=new ArrayList();
//        Collections.copy(list1, list);//IndexOutOfBoundsException: Source does not fit in dest
//        System.out.println(list1);
     //要先进行对于空容器添加元素  最少与copy对象的元素个数相同
        ArrayList list1=new ArrayList();
        for (int i = 0; i <list.size() ; i++) {
            list1.add(" "+i);
        }
        Collections.copy(list1, list);
        System.out.println("copy赋值之后的新容器list1: "+list1);

        //boolean replaceAll(List list,Object oldVal,Object newVal) :使用新值来替换list容器中的旧值
        Collections.replaceAll(list, "why", "王红岩");
        System.out.println(list);





    }
    //max(Collection,Comparator):根据比较器需求得到排序之后的最大值

}
class A{
    int age1;//10
    public A(int age) {
        this.age1=age;//10   10
    }
//    void add(){
//        System.out.println(age1);//10
//    }
}
class B extends A{
    public B(int age) {
        super(age);

    }
//    public B(int age) {
//        super(age);
//        age1
//    }



}

5.Set和List的比较

1.List可以存放null ,而且容许元素重复,对于重复加入的(add)的元素都可以进入数组中,List集合类中的怨怒是是有序的(填入和储存顺序是一致的)

2.Set方法和List大部分方法是一致的,使用起来只有个别不同,但是Set有一下特性

   //set的接口实现类的对象(Set接口对象),不能存放重复的元素,可以添加一个null
        //存放数据是无序的(添加的顺序和取出的顺序不一致)
        //存放数据顺序有底层算法,数组加链表的形式
        //虽然取出的数据顺序不是添加的顺序,但是它固定数据的顺序,不会改变
        //
public static void main(String[] args) {
        //List集合类中的元素是有序的(添加顺序和储存顺序一致),且可重复
        List list = new ArrayList();
        list.add("jack");
        list.add("tom");
        list.add("tom");//可以重复
        //对于运用到index索引的方法,index一定是在数组或者容器中有对应元素的,即不会索引越界OutIndexException
        //List有很多实现类,常用的为Vector ArrayList  LinkedList

        System.out.println(list);//[jack, tom, tom]
}

6.List的常用方法

Set的常用方法与List的常用方法类似,只有个别不同

 public static void main(String[] args) {
        //List集合类中的元素是有序的(添加顺序和储存顺序一致),且可重复
        List list = new ArrayList();
        list.add("jack");
        list.add("tom");
        list.add("tom");//可以重复
        //对于运用到index索引的方法,index一定是在数组或者容器中有对应元素的,即不会索引越界OutIndexException
        //List有很多实现类,常用的为Vector ArrayList  LinkedList

        System.out.println(list);//[jack, tom, tom]
        //list支持索引,每一个元素都有对应的顺序索引,可以通过索引找到元素进行加减
        //索引从0开始
        list.remove(1);//删除索引为1的元素
        System.out.println(list);//[jack, tom]
        //1.add方法
        //add(int index,Object s):在index的位置上插入s元素
        list.add(1, "王红岩");
        System.out.println(list);//[jack, 王红岩, tom],插入到相应位置,原来元素整体后移


        //2.addAll(int index,Collection c)   在index的位置,插入集合中的元素
        List list1 = new ArrayList();
        list1.add("小明");
        list1.add("小王");
        list.addAll(1, list1);//讲list1的元素  小明小王加入到list的索引为1的位置
        System.out.println(list);//[jack, 小明, 小王, 王红岩, tom]


        //3.remove(int index)消除方法  ,消除指定索引index处的元素
        list.remove(0);
        System.out.println(list);//[小明, 小王, 王红岩, tom]


        //4.set(int index ,Object o)  在index的索引上,讲对应的元素,替换为元素 o
        list.set(3, "小红");
        System.out.println(list);//[小明, 小王, 王红岩, 小红]
        //5.List  subList(int fromIndex,int toIndex)//返回fromIndex 到  toIndex的位置子集合  前闭后开 不包括toIndex
        System.out.println(list.subList(0, 1));//[小明]
        //6.indexOf()  查找list容器中是否有指定元素,或者索引位置有无元素  有返回下标  无返回-1
        System.out.println(list.indexOf(" "));//-1
        //7.lastIndexOf()  查找容器中最后出现指定元素的下标, 有返回下标  无返回-1
        System.out.println(list.lastIndexOf("王红岩"));//2











    }

总结

通过本文,我们知道了,Collection的强大功能,其下设两大接口Set 和List的常用方法以及细则(例如有序和无序等),且对于Collection接口的遍历三大方法做了解释,以List为例,这三种都可成功遍历,最简单的还是增强For遍历,最后是对于Collections工具类的使用,其内接接口以及方法的使用无不显示了Collection的强大能力。

在下一章,我们讲着重讲解List的常用方法细则,List有很多实现类,常用的为Vector ,ArrayList LinkedList 我们讲着重讲解这三个实现类的使用方法,以及特点。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王学代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值