JavaSE基础知识(二十一)--Java集合(容器)之基本概念

Java SE 是什么,包括哪些内容(二十一)?

本文内容参考自Java8标准
再次感谢Java编程思想对本文的启发!
Java容器的作用是"保存对象",它有两个不同的概念:
⑴、Collection:代表了一个独立元素的序列,这些元素都服从一条或多条规则。比如
①、List:必须按照插入的顺序保存元素。
②、Set:不能有重复的元素。
③、Queue:只能从一端插入元素,或者只能从一端去除元素,也就是说,所有的操作都在"端"上,而不必遍历这个容器的其它位置。
**⑵、Map:**代表了一组成对的"键值对"对象,允许你使用键来查找值。
在前面的博文中提到过,ArrayList在访问对象的时候,是通过get(int i)方法的,而它最突出的特点就是存储的顺序就是插入的顺序,所以,可以直接给get(int i)方法提供实际参数:1,2,3,4,5,6…直接获取对应位置的对象,所以可以说ArrayList允许使用数字来查找值,因此在某种意义上讲,它将数字与对象关联在了一起。
Map(也称作映射表)允许我们使用一个对象来查找另一个对象,它也被称为"关联数组"(因为它将某些对象与另外一些对象关联在了一起),或者被称为"字典",因为使用键对象来查找值对象,就像在字典中使用单词来定义一样。
代码写的越多,你越会发现,Map是非常强大的编程工具。
尽管并非总是这样,但是在大多数的情况下,你编写的大部分的容器代码都是在与这些接口(Collection、List、Set、Queue、Map)打交道,并且你唯一需要指定所使用的精确类型的地方就是在创建容器对象的时候。因此,你可以像下面这样创建一个List:

// 创建容器对象的普遍形式
   //利用接口List去创建一个具体子类ArrayList的容器对象
   //注意泛型的使用
   List<Apple> apples = new Arraylist<Apple>();

ArrayList已经被向上转型为List,这与上一个代码示例中的处理方式正好相反。使用接口的目的在于如果你决定修改所使用的精确的子类,你所需要做的仅仅只是在创建处修改:

// 修改具体的实现子类
   //在对象创建处直接修改实现的子类
   List<Apple> apples = new Linkedlist<Apple>();

因此,鼓励在创建容器对象的时候,使用一个具体的子类,将其转型为对应的接口,然后在接下来的代码中都使用这个接口。
向上转型存在的问题是:将子类向上转型成父类,父类将无法访问子类中特有的方法。
所以,这种方式并非总能奏效,因为某些子类具有额外的功能(方法)。
例如,LinkedList中具有在List接口中未包含的额外方法,而TreeMap也具有Map接口中未包含的方法。如果你需要使用这些方法,就不能将它们向上转型为更通用的接口。
从Collection接口提供的所有方法来看,它充分概括了序列的概念------一种存放一组对象的方式。
代码示例:
下面这个简单的示例用类Integer对象填充了一个Collection(这里用一个ArrayList表示),然后再打印容器中的所有对象。

// 填充一个Collection
   //类SimpleCollection
   public class SimpleCollection{
     
      //程序执行入口main()方法
      public static void main(String[] args){
     
         //创建一个ArrayList对象,向上转型为Collection类型
         //使用了泛型Integer
         Collection<Integer> c = new ArrayList<Integer>();
         //for循环往里面添加对象
         for(int i=0;i<10;i++){
     
            //添加方法add(),将i添加到容器中
            c.add(i);
         }
         //foreach将所有对象从容器中取出
         for(Integer i:c){
     
            //打印每个Integer对象的值
            System.out.println(i+".");
         }
      }
   }

因为上面的代码示例只使用了接口Collection的方法,因此,任何继承自Collection的类的对象都可以正常工作(类ArrayList是最基本的从Collection延伸而来的序列类型,所以它能正常工作)。
方法add()的名称就表明它是要将一个新元素放置到Collection中。但是,在Java的API文档中非常仔细地叙述到:要确保这个Collection包含指定的元素,这是因为考虑到了Set的含义,因为在Set中只有当前元素不存在的情况下才会被添加进去。而ArrayList或者是其他的List,方法add()总是表示"把它放进去",因为List不关心元素是否重复。

确保Collection包含指定的元素:

JavaSE基础知识(二十一)--Java集合(容器)之基本概念_第1张图片
也就是说,只要你调用了Collection的方法add()添加了某个元素,那么就能确保这个Collection里面一定能包含这个元素(List就可能是多个,Set肯定就是一个,不管怎么样,都保证至少有一个)。
PS:时间有限,有关Java SE的内容会持续更新!今天就先写这么多,如果有疑问或者有兴趣,可以加QQ:2649160693,并注明CSDN,我会就博文中有疑义的问题做出解答。同时希望博文中不正确的地方各位加以指正。

你可能感兴趣的:(Java,SE)