2.Collection体系,集合遍历,泛型、Collections

1.集合

(1)单列集合java.util.Collection

(2)双列集合java.util.Map

2.Collection集合体系

  (1)  java.util.List

  (2)  java.util.Set

3.Collection 常用API

  • 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() : 把集合中的元素,存储到数组中。

4.Iterator迭代器:即Collection集合元素的通用获取方式

(1)注意:

tips::在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生

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

(2)实现原理:

首先通过调用t集合的iterator()方法获得

迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取

出,否则说明已到达了集合末尾,停止遍历元素。

(3) 使用迭代器遍历集合:         

List coll =  new ArayLisr<>();

Iterator<String> iter = coll.iterator();

while (iter.hasNext()) {

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

}

5.增强for循环

        增强for循环(也称for each循环)JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

 

6.泛型

泛型的三种用法:

         (1)泛型类:             class 类名称<泛型>                                   创建对象的时候确定

         (2)泛型接口             interface 接口名称<泛型>             要么实现类直接指定泛型是谁;要么实现类也是一个泛型类

         (3)泛型方法             修饰符 <泛型> 返回值类型 方法名称(参数类型 参数名称) {方法体}

使用泛型的好处:

(1)保证类型统一,确保类型安全。

(2)将可能发生的类型安全问题,从运行期提前到编译期。(有问题尽量在javac的时候就暴露出来最好,别等到java运行时再暴露)

(3)省去向下转型的麻烦。

(4)让代码模板化。

public class GenericDemo { 

    public static void main(String[] args) { 
    Collection coll = new ArrayList();
     coll.add("abc"); 
     coll.add("itcast"); 
     coll.add(5);

    //由于集合没有做任何限定,任何类型都可以给其中存放 Iterator it = coll.iterator();     
     while(it.hasNext()){ 

    //需要打印每个字符串的长度,就要把迭代出来的对象转成String类型 
    String str = (String) it.next(); 
    System.out.println(str.length()); 
    }
} 
}

7.泛型扩展

  • 怎么理解类型擦除?变为原始类型

Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为类型擦除。

如在代码中定义List<Object>List<String>等类型,在编译后都会变成List,JVM看到的只是List,而由泛型附加的类型信息对JVM是看不到的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法在运行时刻出现的类型转换异常的情况,类型擦除也是Java的泛型与C++模板机制实现方式之间的重要区别。

  • 怎么判断这个是否为原始类型?

8.Collections-工具类

API

public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。

public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。

public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。

public static <T> void sort(List<T> listComparator<? super T> ) :将集合中元素按照指定规则排序

案例1:

案例2:Comparator  用法

public class CollectionsDemo3 { 
    public static void main(String[] args) {
         ArrayList<String> list = new ArrayList<String>();
         list.add("cba"); 
         list.add("aba"); 
         list.add("sba"); list.add("nba"); 

         //排序方法 按照第一个单词的降序 
        Collections.sort(list, new Comparator<String>() {
                @Override public int compare(String o1, String o2) {
                     return o2.charAt(0) ‐ o1.charAt(0); } 
                }); 
                System.out.println(list);
         }
 }

案例3:Comparator  与 Comparable 用法:

 集合的对象实现 Comparable接口,重写compare方法

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值