java集合和泛型,Java基础之集合和泛型的总结

  • Post author:
  • Post category:java


什么是集合

集合是一种容器,就是用来存储数据的,存储数据立马就想到了数组,同样是存储数据集合和数组有什区别吗?还是有的

1 数组的长度是不能改变的,一旦创建之后长度就不能改变了,而集合的长度是可以改变的

2 数组的存储类型是单一的,而且是都是基础数据类型,但是集合不同,集合的存储类型必须是对象,对象的类型可以不一致(int 封箱为integer)

复制代码

集合类

按存储结构分为list集合和set集合,list集合中用的最多的就是Arraylist集合了,网上有很多的集合的分类,可以自行查找。

而有一个Collection集合是所有单列集合的父类接口,其中有很多的方法是通用其他的单列集合的了

例如:

public boolean add(E e) : 把给定的对象添加到当前集合中 。

public void clear() :清空集合中所有的元素。

public boolean remove(E e) : 把给定的对象在当前集合中删除。

public boolean contains(E e) : 判断当前集合中是否包含给定的public boolean isEmpty() : 判断当前集合是否为空。

public int size() : 返回集合中元素的个数。

public Object[] toArray() : 把集合中的元素,存储到数组中。

复制代码

有了集合了,如何使用集合呢?首先是循环便利集合啊

而这里有一个专门的遍历集合的接口叫迭代器Iterator

问题是什么叫迭代?感觉好像挺高深的,

官方解释:迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

其实不难发现根据上面解释,我知道了两点一个是获取之前先判断,第二个是取元素,然后分别对应了Iterator里面的两个方法,分别是:

1 hasNext() 返回 true如果迭代具有更多的元素。返回类型为boolean类型

2 next() 返回迭代中的下一个元素。

3 如何创建迭代器,其实每个集合都有自己的迭代器,集合直接.就行了

public class IteratorDemo {

public static void main(String[] args) {

// 使用多态方式 创建对象

Collection coll = new ArrayList();

// 添加元素到集合

coll.add(“串串星人”);

coll.add(“吐槽星人”);

coll.add(“汪星人”);

//遍历

//使用迭代器 遍历 每个集合对象都有自己的迭代器

Iterator it = coll.iterator();

// 泛型指的是 迭代出 元素的数据类型

while(it.hasNext()){ //判断是否有迭代元素

String s = it.next();//获取迭代出的元素

System.out.println(s);

}

}

}

复制代码

主要解释一下hasNext方法

就是类似于指针,指向这个对象或者元素,然后判断这个元素是否为true,如果为true表示有下一个元素,相反如果没有为false,然后指针通过next方法进行往下移动,然后继续判断,再循环判断

泛型是什么?

将未知的数值类型然后指定成已知的数据类型,理论是collection集合可以存储任何数据类型,因为在存储数据的时候,他把其他类型都转换成了object类型,然后再存储的时候可以直接存储,但是在取出来的时候,必须准换成一种确定的数据类型,如果再转错误的时候就会发生java.lang.ClassCastException。异常

泛型也就是多种类型都可以进行存储

简单的说一下泛型的几种使用的情况

1 首先是类的使用

修饰符 class 类名{}

class ArrayList{

public boolean add(E e){ }

public E get(int index){ }

….

}

用法就是什么时候用,什么时候确定类型,例如

ArrayList list = new ArrayList();

class ArrayList{

public boolean add(String e){ }

public String get(int index){ }

}

ArrayList list = new ArrayList();

class ArrayList {

public boolean add(Integer e) { }

public Integer get(int index) { }

}

还有一种自己造类型的

public class MyGenericClass {

//没有MVP类型,在这里代表 未知的一种数据类型 未来传递什么就是什么类型

private MVP mvp;

public void setMVP(MVP mvp) {

this.mvp = mvp;

}

public MVP getMVP() {

return mvp;

}

}

public class GenericClassDemo {

public static void main(String[] args) {

//也就是假设MVP是String类型的数据

MyGenericClass my = new MyGenericClass();

// 调用setMVP

my.setMVP(“大胡子登登”);

// 调用getMVP

String mvp = my.getMVP();

System.out.println(mvp);

//同理,创建一个泛型为Integer的类

MyGenericClass my2 = new MyGenericClass();

my2.setMVP(123);

Integer mvp2 = my2.getMVP();

}

}

**含有泛型的方法**

public class MyGenericMethod {

public void show(MVP mvp) {

System.out.println(mvp.getClass());

}

public MVP show2(MVP mvp) {

return mvp;

}

}

就是用什么就是什么格式

public static void main(String[] args) {

// 创建对象

MyGenericMethod mm = new MyGenericMethod();

// 演示看方法提示

mm.show(“aaa”);//String

mm.show(123);//int

mm.show(12.45);//double

}

————————————————————————————————

含有泛型的接口

1.在定义实现类的时候确定泛型的类型

public interface MyGenericInterface{

public abstract void add(E e);

public abstract E getE();

}

实现类

public class myclass implements MyGenericInterface{

@Override

public void add(String e) {

// 省略…

}

@Override

public String getE() {

return null;

}

}

2,始终不确定数据类型的,在创建对象的时候直接使用

public class MyImp2 implements MyGenericInterface {

@Override

public void add(E e) {

// 省略…

}

@Override

public E getE() {

return null;

}

}

//使用的时候直接是

public class domain(){

public static void main(String[] args){

MyImp2 my = new MyImp2();

my.add(“aa”);

}

}

复制代码

由此开始我的java学习之路,本人大三学生一个,希望以后自己让自己放光发亮。

第一次写文章哪里不好请多指教。