欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

13.Java语言Collection集合、泛型

程序员文章站 2022-05-23 15:17:17
...

Collection集合

1.集合:

a)集合是一种容器,用来存储数据

b)集合的长度不固定,数组的长度固定

c)Java中定义了很多集合类,用于存储不同数据结构的数据

d)有些数据结构会导致增删慢,改查快,有些相反

e)Java中集合体系图

13.Java语言Collection集合、泛型

2.Collection集合:

包名:java.util.Collection

单列集合类的根接口,用于存储一些符合某种规则的元素。

常用方法:

1.增加

a).把给定的元素添加到集合中 public boolean add(E e){}

ArrayList<String> list = new ArrayList<>();
list.add("aaaaa");

2.删除

删除集合中的元素

a).清空集合中的所有元素,public void clear() {}

ArrayList<String> list = new ArrayList<>();

list.clear();

b).删除指定内容 public boolean remove(Object o){}

ArrayList<String> list = new ArrayList<>();

list.remove("ce");

3.判断

a).判断集合是否为空, public boolean isEmpty() {}

ArrayList<String> list = new ArrayList<>();

list.isEmpty();

b).判断集合中是否包含给定的元素public boolean contains(Object o) {}

ArrayList<String> list = new ArrayList<>();

list.contains("ce");

4.获取

a)获取集合中元素的个数,public int size() {}

ArrayList<String> list = new ArrayList<>();

list.size();

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

ArrayList<String> list = new ArrayList<>();

list.toArray();

Iterator迭代器

Iterator接口,java.util.Iterator

public Iterator iterator() : 获取集合对应的迭代器,用来遍历集合中的元素的。

1.Iterator迭代器的使用:

public class CollectionTest {

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();

        list.add("aaaaaa");

        //获得迭代对象

        Iterator<String> it = list.iterator();

        System.out.println(it.next());

    }

}
 
aaaaaa

2.Iterator接口常用方法:

a).public E next() :返回迭代的下一个元素

b).public boolean hasNext() :如果仍有元素可以迭代,则返回 true。

 

使用next()方法,当没有下一个元素的时候,再次调用就会抛出

java.util.NoSuchElementException没有集合元素的错误

       所以会配合hasNext()方法使用,当有元素时才获取下一个元素

1.实现原理

内部采用指针的方式跟踪集合元素,在没有调用next()方法之前,指针指向集合之前,当调用方法后,返回集合的第一个元素并且指针向后移动一个元素。

13.Java语言Collection集合、泛型

增强for

增强for循环,也叫foreach循环,专门用来遍历数组和集合中的元素,它的内部原

理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作

1.for-each循环示例:

public static void main(String[] args) {

    //定义一个数组

    int[] arrInt = {1,2,123,12,44,23,432};

    //使用foreach循环遍历输出

    for (int k:arrInt) {

        System.out.println(k);

    }



    //定义一个集合

    ArrayList<String> list = new ArrayList<>();

    list.add("aaa");

    list.add("bbb");

    list.add("ccc");

    //遍历输出

    for (String str:list) {

        System.out.println(str);

    }

}

 

泛型

可以在类或方法中预支地使用未知的类型。一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型

1.泛型的好处:

a)当存储不同类型的数据到一个集合中的时候,可以自动检测错误。

b)避免了类型强转的麻烦

2.泛型的定义与使用:

a)含有泛型的类:

修饰符 class 类名<代表泛型的变量> { }

例如,API中的ArrayList集合:

class ArrayList <E>{

      public boolean add(E e){ }

public E get(int index){ }

....

 }

E是未知的一种数据类型 未来传递什么就是什么类型 

使用格式:

       创建对象的时候确定泛型的类型

2.含有泛型的方法

修饰符 返回值类型 方法名(参数){ }

例如:

public class MyGenericMethod {

public <MVP> void show(MVP mvp) {

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

 }

public <MVP> MVP show2(MVP mvp) {

return mvp;

}

}

              使用格式:

                     调用方法时确定泛型的类型

3.含有泛型的接口:

修饰符 interface接口名<代表泛型的变量> { }

public interface MyGenericInterface<E>{

public abstract void add(E e);

public abstract E getE();

}

              使用格式:

1.定义类的时候确定泛型的类型

2.始终不确定泛型的类型,直到创建对象时,确定泛型的类型

4.泛型的通配符:

可以接收具有任何泛型的集合;<?>

1.泛型的上限     <? extends 类名>

参数只能接收,此类或者此类子(孙)类的集合

2.泛型的下限     <? super 类名>

参数只能接收,此类或者此类父(爷)类的集合