java之集合框架(一)

集合框架是Java中的一个很重要的基本知识。鉴于自己对这个集合框架也不是掌握的很好的情况下,本人进行了一次集合框架的系统性的学习。

以下是本人学习过程的一些总结和见解。希望可以对一些朋友提供参考的帮助。

首先,先上一个集合框架的类图吧。

集合框架的作用:

v 集合用于存储、检索和操纵数据
v 集合框架是用于表示和操纵集合的统一体系结构
v 集合框架包含三个组件
 
*引用老师的讲课课件的集合框架的分析图

 

相信一些初学者看到了上面的继承图之后吓一大跳。这是些什么呀,好多继承关系。但是,不用担心,实际上常用的也只不过是第二张图中的这些集合而已。所以,现在我们开始学习吧。

从他们的基类Collection开始。

Collection本身是一个接口来的。这个也可以理解,它的出现就是为了给我们经常使用的List,Set继承。

但是注意的是,List和Set也是接口。这就是我们List list=new ArrayList();  这里这样写的了,面向接口编程了嘛。List是接口,那么list就可以随便写ArrayList或者LinkedList对象 了。如果不清楚这点的可以上百度或者google查下。

正是因为List是接口,那么,ArrayList,Vector,LinkedList就是具体实现的类。而且这几个类就是我们常用的。(当然还有其他的)

实现了Set接口的TreeSet和HashSet也是一样的道理,上面的一张图已经可以很清晰的看出他们的关系和作用。

当然还有Map,但是Map并不是继承Collection的,你可以理解Map和Collection是同级别的接口吧。实现了Map接口的常用类有TreeMap和HashMap

 

 · Collection 接口是一组允许重复的对象。

  · Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。

  · List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。

  · Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。

 

 

Collection接口提供给我以下常用的方法:

基本操作  增加元素

booleanadd(E e)
          确保此 collection 包含指定的元素(可选操作)。
 booleanaddAll(Collection<? extendsE> c)
          将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
删除元素   

 booleanremove(Object o)
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
 booleanremoveAll(Collection<?> c)
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
  判定包含关系

booleancontains(Object o)
          如果此 collection 包含指定的元素,则返回 true
 booleancontainsAll(Collection<?> c)
          如果此 collection 包含指定 collection 中的所有元素,则返回 true

判定是否为空

booleanisEmpty()
          如果此 collection 不包含元素,则返回 true

最常用的就是

Iterator<E>

iterator()
          返回在此 collection 的元素上进行迭代的迭代器。

 

这里就涉及到了迭代器。什么是迭代器呢??

Iterator 接口学习

访问/遍历集合元素的好办法是使用Iterator接口(迭代器用于取代Enumeration)

Public  interface  Iterator

    Public Boolean hasNext(}


    Public Object next(}; 

    Public 
void  remove(}; 

}  

 

迭代器是一个很好的用来遍历的好方法.

Iterator 接口定义了对 Collection 类型对象中所含元素的遍历等增强处理功能
可以通过 Collection 接口中定义的 iterator() 方法获得一个对应的 Iterator ( 实现类 ) 对象
Set ( 实现类 ) 对象 对应的 Iterator 仍然是无序的
List ( 实现类 ) 对象 对应的 ListIterator 对象可以实现对所含元素的双向遍历 : 使用 next() 方法和 previous() 方法

 

Iterator接口实际上也就是三个方法,很容易掌握。

 

hasNext()  判断集合是否还有可访问的元素

Next()  方法 返回集合集合的下一个元素,如果没有下一个则引发NoSuchElementException

remove() 从迭代器中删除一个元素

 

 

好吧。现在我们就开始学习他们的实现类,List的实现类有:ArrayList,Vactor,LinkedList

之前我们知道了List接口的性质了,现在回顾下。

List接口的特征

List 元素以线性方式排列,
List 有序 的, 存储的顺序与添加的顺序相同
可以通过整数索引 ( 0 开始 ) 访问列表中的元素。
列表通常 允许重复 的元素。
允许 null 值。(注意: 某些实现 List 接口的列表类,对是否允许 null 在列表中的存在有不同的规定。)

 

根据数据结构的不同,实现了 List 接口的常用类有 ArrayList /Vector LinkedList Stack Queue 等。

 

现在开始学习ArrayList实现类

 

ArrayList实现类的学习

List:线性排列,有序,顺序与添加时相同,允许重复和为null

ArrayList的案例:

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListDemo {

 public static void main(String[] args) {
  List list=new ArrayList();
  list.add("ni");
  list.add("hao");
  list.add("ma");
  list.add("?");
  list.add("xixi");
  list.add("haha");
  
  System.out.println(list);//从结果看就知道List是以数组来存放
  //删除
  list.remove(4);
  list.remove("haha");
  System.out.println(list);
  
  //增加for循环输出
     for(Object o:list){
       String name=(String)o;
     System.out.println (name);
     
     //这里顺带学下排序
     //集合框架的排序需要使用到Collections类
     Collections.sort(list);
     System.out.println("排序后的结果");
     System.out.println(list);
     
     //逆序
     Collections.reverse(list);
     System.out.println("排序后的结果");
     System.out.println(list);
     
     //随机混合
     Collections.shuffle(list);
     System.out.println("排序后的结果");
     System.out.println(list);
     
    }
}

}

 

从这里应该掌握的是:Collections类的使用(集合排序的时候经常使用)

 

(插曲)Collections学习

 

经常使用的方法是

sort ()

shuffle()

reverse()

copy() 

Collections里面提供的都是静态方法,所以我们不需要new实例就可以直接打点调用了.

 

来一个洗牌的案例:


public class CardsDemo {
 public static void main (String[] args) {
     //四种花色
     String[] colors={"黑桃","红桃","梅花","方块"};
     //数字牌
     String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
     //制作一副新牌
     ArrayList cards=new ArrayList();
     for (int i = 0; i<colors.length; i++){
      for (int j = 0; j<nums.length; j++) {
       cards.add(colors[i]+nums[j]);
      }
     }
     //打印
     for (int i = 0; i<cards.size(); i++) {
      System.out.print (cards.get(i)+" ");
      if((i+1)%13==0){
       System.out.println ();//换行
      }
     }
     System.out.println ("===================================");
     //洗牌
     Collections.shuffle(cards);
     for (int i = 0; i<cards.size(); i++) {
      System.out.print (cards.get(i)+" ");
      if((i+1)%13==0){
       System.out.println ();//换行
      }
     }    
    }
}

执行结果:

黑桃A
黑桃2
黑桃3
黑桃4
黑桃5
黑桃6
黑桃7
黑桃8
黑桃9
黑桃10
黑桃J
黑桃Q
黑桃K
==========================
红桃A
红桃2
红桃3
红桃4
红桃5
红桃6
红桃7
红桃8
红桃9
红桃10
红桃J
红桃Q
红桃K
==========================
梅花A
梅花2
梅花3
梅花4
梅花5
梅花6
梅花7
梅花8
梅花9
梅花10
梅花J
梅花Q
梅花K
==========================
方块A
方块2
方块3
方块4
方块5
方块6
方块7
方块8
方块9
方块10
方块J
方块Q
方块K
==========================
方块4
梅花5
红桃9
梅花J
梅花A
黑桃4
梅花8
黑桃10
梅花4
梅花3
方块K
梅花9
方块2
==========================
红桃2
红桃A
黑桃8
梅花10
黑桃J
方块6
方块J
方块8
黑桃K
方块Q
红桃J
红桃7
黑桃5
==========================
方块5
方块9
红桃Q
梅花2
黑桃Q
梅花K
黑桃3
黑桃6
红桃K
梅花Q
方块10
黑桃A
方块3
==========================
黑桃9
方块A
红桃4
红桃5
红桃8
红桃3
梅花7
梅花6
黑桃7
红桃6
方块7
黑桃2
红桃10
========================== 

那么,我们就大概之后的了shuffle()的方法有啥作用了.

这里面重要的不是集合里面的那几个方法的使用,而是要知道实现类有什么样的区别。

 

在正常的开发中,我们使用最多的应该就是这个ArrayList了。ArrayList挺简单的,重要的是我们应该知道这些集合实现类的不同之后,在适当的时候我们就会想到应该用什么来实现了。那么,下一节接着来学习Vector,LinkedList,Queue

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值