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

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

前言

我们知道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 我们讲着重讲解这三个实现类的使用方法,以及特点。

相关文章
|
21天前
|
存储 Java 开发者
Java 中 Set 类型的使用方法
【10月更文挑战第30天】Java中的`Set`类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的`Set`实现类,并灵活运用各种方法来实现对集合的操作和处理。
|
21天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
41 2
|
2月前
|
Java 编译器
Java“返回类型为 void 的方法不能返回一个值”解决
在 Java 中,如果一个方法的返回类型被声明为 void,那么该方法不应该包含返回值的语句。如果尝试从这样的方法中返回一个值,编译器将报错。解决办法是移除返回值语句或更改方法的返回类型。
|
2月前
|
设计模式 Java
Java“不能转换的类型”解决
在Java编程中,“不能转换的类型”错误通常出现在尝试将一个对象强制转换为不兼容的类型时。解决此问题的方法包括确保类型间存在继承关系、使用泛型或适当的设计模式来避免不安全的类型转换。
|
2月前
|
Java
Java 中锁的主要类型
【10月更文挑战第10天】
|
2月前
|
安全 Java
Java“不兼容类型” 错误怎么查找解决
在 Java 中遇到“不兼容类型”错误时,首先理解错误信息,它表明试图将一种类型赋给不兼容的类型。检查代码中类型不匹配的赋值、方法调用参数类型不匹配、表达式类型不兼容及泛型类型不匹配等问题。解决方法包括进行类型转换、修改代码逻辑、检查方法参数和返回类型以及处理泛型类型不匹配。通过这些步骤,可以有效解决“不兼容类型”错误,确保代码类型兼容性良好。
|
2月前
|
Java 程序员 编译器
Java中的异常类型
Java中的异常类型
23 3
|
2月前
|
Java 开发者
Java“类 Y 中的方法 X 不能应用于给定类型”解决
在Java中遇到“类Y中的方法X无法应用于给定类型”的错误时,通常是因为方法调用时的参数类型与定义不符。解决此问题需检查方法签名,确保传递的参数类型正确无误,或使用显式类型转换以匹配方法所需的参数类型。这种错误提示帮助开发者及时修正类型不匹配的问题。
|
2月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
76 3
|
2月前
|
Java 编译器
Java“无效的方法声明;需求返回类型”怎解决
要解决Java中的“无效的方法声明;需要返回类型”错误,需为方法指定正确的返回类型。检查方法签名,添加如`void`、`int`、`String`等类型,并确保方法体内正确使用`return`语句。这能帮助Java编译器理解和验证方法的行为。遵守这些规则,可以避免语法错误并确保程序正常运行。