集合

集合

  • 集合是Java中提供的一种存储多个数据的容器

  • 集合与数组的区别

    • 数组的长度固定,集合的长度可变
    • 数组中存储的是同一类型的元素,可以是基本数据类型,也可以是引用数据类型;而集合存储的都是对象,且对象的类型可以不一致
  • 集合按照其存储结构分类为:

    java.util.Collection:单列集合

    java.util.Map:双列集合

1.Collection集合

Collection集合

  • 单列集合的根接口

  • 子接口

    • java.util.List:1.有序集合,2.允许存储重复元素,3.有索引,可使用普通的for循环遍历

      包括:Vector集合、ArrayList集合、LinkedList集合

    • java.util.Set:1.不允许存储重复元素,2.无索引,不能使用普通的for循环遍历

      包括:

      有序集合:TreeSet集合、HashSet集合

      无序集合:LinkedHashSet集合

  • 单列集合通用方法

    • public boolean add(E e): 把给定的对象添加到当前集合中 。
    • public void clear() :清空集合中所有的元素。
    • public boolean remove(E e): 把给定的对象在当前集合中删除。集合存在该元素则删除,返回true;集合不存在该元素则删除失败,返回false
    • public boolean contains(E e): 判断当前集合中是否包含给定的对象。包含返回true,不包含返回false
    • public boolean isEmpty(): 判断当前集合是否为空。为空返回true,不为空返回false
    • public int size(): 返回集合中元素的个数。
    • public Object[] toArray(): 把集合中的元素,存储到数组中。

2.Iterator迭代器

迭代:Collection集合元素的通用获取方式,在取元素前先判断集合中是否含有元素,有则取出元素,一直循环直到取出集合中所有的元素,这种取出方式称为迭代。

Iterator迭代器是一个接口,需要使用Iterator接口的实现类对象,Collection接口定义了一个iterator()方法返回一个在当前Collection集合的元素上进行迭代的迭代器

        Iterator<String> it = collection.iterator();
        //  泛型<String>指的是 迭代出 元素的数据类型
        while(it.hasNext()){ //判断是否有迭代元素
            String s = it.next();//获取迭代出的元素
            System.out.println(s);
        }
  • 常用方法:

    • public E next():返回迭代的下一个元素。
    • public boolean hasNext():如果仍有元素可以迭代,则返回 true。
  • 实现原理

    • Iterator<String> it = collection.iterator();:获取迭代器的实现类对象,将索引指针指向集合的-1索引
    • it.hasNext();:判断集合中还有无下一个元素
    • it.next();:1.取出指针的下一个元素;2.将指针向后移一位

增强for循环

  • 增强for循环,又称for each循环;专门用于遍历数组与集合,内部原理同样是个Iterator迭代器,故在遍历的过程中不能对集合中的元素进行增删操作。

  • for (集合/数组的数据类型 自定义遍历元素变量名 : 集合名/数组名){
    //对遍历的元素变量的操作
    }
    

3.泛型

是一种未知的数据类型,当使用数据类型不能确定时,可以使用泛型;当创建对象时,数据类型作为参数传递,将会确定泛型的数据类型

  • 集合不使用泛型时,默认的类型为Object类型,可以存储任意类型的数据,但不安全,类型转换时可能会引发异常
  • 集合使用泛型,避免了需要类型转换的问题;将运行期异常提升到了编译期异常,

定义含有泛型的方法

public <M> void method1(M m){
//具体操作
}

对象名.method1(1)//通过对象调用普通方法传递任意数据类型值

public static <M> void method2(M m){
//具体操作
}

类名.method2("字符串")//通过类名调用静态方法传递任意数据类型值
  • 泛型定义在方法的修饰符与返回值之间

  • 在调用方法的时候确定泛型的数据类型

含有泛型的接口

定义格式:

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

例:

public interface MyGenericInterface<E>{
	public abstract void add(E e);
	
	public abstract E getE();  
}

使用格式:

  • 1.定义类时确定泛型的类型
  • 2.一直不确定泛型的数据类型,直到创建实现类时才确定数据类型

泛型的通配符

?:代表任意的数据类型,不能创建对象使用,只能作为方法的参数使用

  • 泛型的上限限定:? extend E 代表使用的泛型只能是E类型的子类/本身
  • 泛型的下限限定:? super E 代表使用的泛型只能是E类型的父类/本身
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值