IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java---集合和泛型 -> 正文阅读

[Java知识库]java---集合和泛型

目录

集合?

Collection接口

??泛型

泛型的擦除机制

?使用泛型数组的注意问题

object数组的强制转化


集合

Java的集合像是一个容器,专门用于存放对象的引用,这些对象可以是任意的数据类型,并且长度可变,其中这些集合都处于java.util的包中

集合按照其存储结构可以分为两大类:单列集合Collection和双列集合Map

单列集合Collection

单列集合的根接口,用来存储一系列符合某一种规则的元素。collection集合有两个重要的子接口List和Set

List集合的特点是元素有序可重复

Set集合的特点是元素无序不重复

双列集合Map

Map集合中每一个元素都包含一对键值,并且key是唯一的,可以通过key找到对应的value

Collection接口

boolean add(Object o)---向集合添加元素

 public static void main(String[] args) {
       Collection collection=new ArrayList();
// Collection是接口,ArrayList()是这个接口的实现类,类重写了Collection的抽象方法
//通过向上转型,collection可以调用Collection的内部方法,但是抽象方法被重写了,构成了多态
       collection.add("ui");
       collection.add(1);
       collection.add("67");
        System.out.println(collection);
    }

e的类型是object类型,可以增加任意类型的元素

boolean addAll(Collection c)---将集合c的所有元素增加到该集合

 public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
       collection.add("67");
        System.out.println(collection);
        collection.addAll(collection);
        System.out.println(collection);
    }

?void clear()---删除该集合的所有元素

 public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
       collection.add("67");
        System.out.println(collection);
        collection.clear();
        System.out.println(collection);
    }

boolean remove(Object o)---?删除该集合中指定的元素(只删除一次)

  public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
        collection.add(1);
       collection.add("67");
        System.out.println(collection);
        collection.remove(1);
        System.out.println(collection);
    }

?boolean removeAll(Collection c)---删除此集合中所有集合c的元素(重复元素全部删除)

   public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
        collection.add(1);
       collection.add("67");
        System.out.println(collection);
     Collection collection1=new LinkedList();
     collection1.add(1);
     collection.removeAll(collection1);
        System.out.println(collection);
    }

?boolean isEmpty()---判断集合是否为空

  public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
        collection.add(1);
        System.out.println(collection);
        System.out.println(collection.isEmpty());
    }

?boolean contains(Object o)---判断是否含有某一个元素

public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
        collection.add(1);
        System.out.println(collection);
        System.out.println(collection.isEmpty());
        System.out.println(collection.contains(1));
    }

??boolean containsAll(Collectio o)---判断这个集合是否包含集合o的所有元素

public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
        collection.add(1);
        System.out.println(collection);
       Collection collection1=new LinkedList();
       collection1.add(1);
       collection1.add(3);
        System.out.println(collection1);
        System.out.println(collection.containsAll(collection1));
    }

?int size()---获取该集合的元素个数

 public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
        collection.add(1);
        System.out.println(collection);
        System.out.println(collection.size());
    }

?object【】 toArray()---返回装有集合中所有元素的数组

public static void main(String[] args) {
       Collection collection=new ArrayList();
       collection.add("ui");
       collection.add(1);
        collection.add(1);
        Object[] s=collection.toArray();
        for (Object o:s) {
            System.out.print(o+" ");
        }
    }

?泛型

传入元素类型是Object时,因为Object类是所有类的父类,所以什么元素类型都可以存放

class MyarrayList {
    Object[] objects = new Object[10];
    int usedsize = 0;

    public void add(Object e) {
        objects[usedsize++] = e;
    }

    public Object getObjects(int pos) {
        return objects[pos];
    }

    public  void print() {
        for (int i = 0; i < usedsize; i++) {
            System.out.print(objects[i] + " ");
        }
        System.out.println();
    }
}
public class text {
    public static void main(String[] args) {
        MyarrayList myarrayList=new MyarrayList();
        myarrayList.add("1");
        myarrayList.add(1);
        myarrayList.add('o');
       myarrayList.print();
        System.out.println(myarrayList.getObjects(0));
    }
}

?但是如果我们进行了强制类型转化,常常会出现问题

  String str=(String) myarrayList.getObjects(1);//返回Object类型,需要强制类型转化
        System.out.println(str);

?泛型可以解决这个问题---限定操作的数据类型

?在实例化类时传入参数:这个实例化对象只能存放String的数据

   public static void main(String[] args) {
        MyarrayList<String> myarrayList=new MyarrayList<String>();
        //传入String类型的数据
        myarrayList.add("hello");

        //传入int类型的数据
        MyarrayList<Integer> myarrayList1=new MyarrayList<>();
        myarrayList1.add(1);

        //传入char类型的数据
        MyarrayList<Character> myarrayList2=new MyarrayList<>();
        myarrayList2.add('1');
    }

使用泛型的意义:自动进行类型检查、自动进行类型转化?

泛型的擦除机制

泛型在编译期间已经被擦除为了Object类型?

?使用泛型数组的注意问题

数组在运行期间存储和检查类型信息,但是泛型在编译期间检查错误,并且运行期间已经被擦除为Object类型

不能使用泛型来定义数组

E[]objects=new E[10];---这行代码错误

错误的原因:?

编译期间E类型被擦除为Object类型 ,如果上述代码成功,那么编译期间擦除为

Object[]objects=new Object[10];??

但是如果我们将这个数组强制转化为String类型的数组,就会产生错误,为了避免这样的错误,JVM底层不允许这样定义数组

?正确的泛型数组定义方式:使用映射

object数组的强制转化

java中,其余数组可以整体向上转型转化为Object数组,但是Object数组向下转型时不能整体转型,要将每个元素单独强转

object类不能引用8个普通类型,要引用普通类型的包装类

 public static void main(String[] args) {
        String []str=new String[10];
        System.out.println(str);
        Object[] s=new String[10];//String数组可以向上提升为Object数组
        System.out.println(s);
     //   String [] ret= (String[]) new Object[10];//编译通过
        //     System.out.println(ret);//运行时抛出异常---Object数组不可以整体强制转化为String数组
        
      //  Integer []dest= (Integer []) new Object[10];//编译通过
      //  System.out.println(dest);//运行抛出异常
        Object []dest=new Integer[10];
        System.out.println(dest);

Object a=new String[]{"hello","world"};//Object类是所有类的超类
        System.out.println(a);

    }
 public static void main(String[] args) {
        Object[] s = new String[]{"hello", "world"};
        System.out.println(Arrays.toString(s));

        Object[]objects=new Object[]{"hello", "world"};
        String []str=new String[objects.length];
        for (int i = 0; i < objects.length; i++) {
           str [i]=(String) objects[i];
        }
        System.out.println(Arrays.toString(str));
    }

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-03 01:03:47  更:2022-02-03 01:05:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:08:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码