java---集合和泛型
2022/2/1 22:10:18
本文主要是介绍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---集合和泛型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27本地多文件上传的简单教程
- 2024-11-27低代码开发:初学者的简单教程
- 2024-11-27如何轻松掌握拖动排序功能
- 2024-11-27JWT入门教程:从零开始理解与实现
- 2024-11-27安能物流 All in TiDB 背后的故事与成果
- 2024-11-27低代码开发入门教程:轻松上手指南
- 2024-11-27如何轻松入门低代码应用开发
- 2024-11-27ESLint开发入门教程:从零开始使用ESLint
- 2024-11-27Npm 发布和配置入门指南
- 2024-11-27低代码应用课程:新手入门指南