概述

容器 就是存放数据的一个集合

(java提供了一个接口专门去约束我们容器的实现类)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Set: does not allow duplicate objects toenter the collection of elements

SortedSet: similar to set except that theelements in the set are stored in ascending order

List: is ordered, maintain an order asobjects are added and removed from the collection,can also contain duplicateentries of objects

Map: stores objects that are identifiedby unique keys, and may not store duplicate keys

SortedMap: similar to Map, except the objectsare stored in ascending order according to their keys

即:

•   Collection 接口:定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。

–  Set 中的数据对象没有顺序且不能够反复。

–  List 中的数据对象有顺序且能够反复。

–  Map 接口定义了存储“键(key)- 值(value)映射对”的方法。

Collection方法

•    Collection 表示一组对象。它是集中,收集的意思。就是把一些数据收集起来。

•    Collection函数库是在java.util 包下的一些接口和类,类是用来产生对象存放数据用的。而接口是訪问数据的方式。

•    Collection函数库与数组的两点不同:

1.数组的容量是有限制的,而Collection库没有这种限制,它容量能够自己主动的调节 。

2.Collection函数库仅仅能用来存放对象,而数组没有这种限制。

•    Collection接口是Collection层次结构 中的根接口。它定义了一些最主要的訪问方法,让我们能用统一的方式通过它或它的子接口来訪问数据。

•    差别:Collection代表一组对象。 Collection函数库就是java中的集合框架,Collection接口,是这个集合框架中的根接口。

•    存放在Collection 库中的数据,被称为元素(element) 。

Demo

  1. <span style="font-size:18px;"><span style="font-size:18px;">public class Person {
  2. private intid;
  3. private Stringname;
  4. public Person(int id, String name) {
  5. this. id= id; this. name = name;
  6. }
  7. public intgetId() { return id; }
  8. public StringgetName() { return name; }
  9. public voidsetId (int id) {
  10. this. id= id;
  11. }
  12. public voidsetName (String name) {
  13. this.name = name;
  14. }
  15. public StringtoString() {
  16. return “id: ” + id + “|name: ” + name;
  17. }
  18. }
  19. ========================================================================
  20. import java.util.*;
  21. public class CollectionTest1 {
  22. public staticvoid main (String[] args) {
  23. Collectionc = new HashSet();
  24. c. add(new Person(1, “c++"));
  25. c. add(new Person(2, “java"));
  26. System.out.println(c. size() + ": " + c);
  27. System.out.println("contains: " + c. contains (new Person(2, "java")));
  28. System.out.println(c. remove (new Person(2, " java")));
  29. System.out.println(c. size() + ": " + c);
  30. }
  31. }</span></span>

输出结果:

Iterator接口

•    全部实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。

•    Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。

•    Iterator接口定义了例如以下方法:

Demo

  1. <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
  2. public class IteratorTest1 {
  3. public staticvoid main(String[] args) {
  4. Collectionc = new ArrayList();
  5. c.add("good"); c.add("morning");
  6. c.add("key"); c.add("happy");
  7. for(Iterator it = c.iterator(); it.hasNext(); ) {
  8. Stringtem = (String) it.next();
  9. if(tem.trim().length() <= 3) {
  10. it.remove();
  11. }
  12. }
  13. System.out.println(c);
  14. }
  15. }
  16. </span></span>

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Set方法

•    Set 接口是Collection接口的子接口,Set接口没有提供额外的方法,Set接口的特性是容器类中的元素是没有顺序的。并且不能够反复。

•    Set 容器能够与数学中“集合”的概念相相应。

•    J2SDK API中所提供的 Set 容器类有 HashSet,TreeSet 等。

Demo

  1. <span style="font-size:18px;">import java.util.*;
  2. public class SetTest {
  3. public staticvoid main (String[] args) {
  4. Set s =new HashSet();
  5. s.add("hello");
  6. s.add("world");
  7. s.add(new Integer(4));
  8. s.add(new Double(1.2));
  9. s.add("hello"); // 同样的元素不会被增加
  10. System.out.println(s);
  11. }
  12. }
  13. </span>

List接口

•    List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的。并且能够反复。

•    List 容器中的元素都相应一个整数型的序号记载其在容器中的位置,能够依据序号存取容器中的元素。

•    J2SDK 所提供的 List 容器类有 ArrayList。LinkedList 等。

Demo

  1. <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
  2. public class ListTest {
  3. public staticvoid main(String[] argc) {
  4. List l1= new ArrayList();
  5. for (inti = 0; i <= 5; i++)
  6. l1.add("a"+ i);
  7. System.out.println(l1);
  8. list.add(3,"a100");
  9. System.out.println(l1);
  10. list.set(6,"a200");
  11. System.out.println(list);
  12. System.out.print((String)list.get(2) + " ");
  13. System.out.println(list.indexOf("a3"));
  14. list.remove(1);
  15. System.out.println(list);
  16. }
  17. }</span></span>

经常使用算法

类 java.util.Collections 提供了一些静态方法实现了基于List容器的一些经常使用算法

Demo

  1. <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
  2. public class CollectionsTest {
  3. publicstatic void main(String[] argc) {
  4. List aList =new ArrayList();
  5. for (int i = 0;i < 5; i++)
  6. aList.add("a"+ i);
  7. System.out.println(aList);
  8. Collections.shuffle(aList);// 随机排列
  9. System.out.println(aList);
  10. Collections.reverse(aList);// 逆续
  11. System.out.println(aList);
  12. Collections.sort(aList);// 排序
  13. System.out.println(aList);
  14. System.out.println(Collections.binarySearch(aList,"a2"));
  15. Collections.fill(aList,"hello");
  16. System.out.println(aList);
  17. }
  18. }
  19. </span></span>

Comparable接口

问题:上面的算法依据什么确定集合中对象的“大小”顺序?

•     全部能够“排序”的类都实现了java.lang.Comparable 接口,Comparable接口中仅仅有一个方法

public int compareTo(Objectobj);

该方法:

•   实现了Comparable 接口的类通过实现 comparaTo 方法从而确定该类对象的排序方式。

Demo

  1. <span style="font-size:18px;"><span style="font-size:18px;">public class Student implements Comparable {
  2. private Stringname;
  3. private Integerscore;
  4. publicStudent(String name, int score) {
  5. this.name =name;
  6. this.score =new Integer(score);
  7. }
  8. public intcompareTo(Object o) {
  9. Student n =(Student) o;
  10. int a =score.compareTo(n.score);
  11. return (a !=0 ?
  12.  
  13. a : name.compareTo(n.name));
  14. }
  15. public StringtoString() {
  16. return"name: " + name + " score: " + score.toString();
  17. }
  18. }
  19. import java.util.*;
  20. public class StudentTest {
  21. public static voidmain(String[] args) {
  22. List l1 = newLinkedList();
  23. l1.add(newStudent(“ttt", 66));
  24. l1.add(newStudent(“bbb", 77));
  25. l1.add(newStudent(“ccc", 99));
  26. l1.add(newStudent(“fff", 88));
  27. l1.add(newStudent(“aaa", 66));
  28. System.out.println(l1);
  29. Collections.sort(l1);
  30. System.out.println(l1);
  31. }
  32. }</span></span>

Map接口

•    实现Map接口的类用来存储键(key)-值(value) 对。

•    Map 接口的实现类有HashMap和TreeMap等。

•    Map类中存储的键-值对通过键来标识。所以键值不能反复。

Demo

  1. <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
  2. public class MapTest {
  3. public staticvoid main(String args[]) {
  4. Map m1 =new HashMap();
  5. Map m2 =new TreeMap();
  6. m1.put("one",new Integer(1));
  7. m1.put("two",new Integer(2));
  8. m1.put("three",new Integer(3));
  9. m2.put("A",new Integer(1));
  10. m2.put("B",new Integer(2));
  11. System.out.println(m1.size());
  12. System.out.println(m1.containsKey("one"));
  13. System.out.println(m2.containsValue(newInteger(1)));
  14. if(m1.containsKey("two")) {
  15. inti = ((Integer) m1.get("two")).intValue();
  16. System.out.println(i);
  17. }
  18. Map m3 =new HashMap(m1);
  19. m3.putAll(m2);
  20. System.out.println(m3.size());
  21. }
  22. }</span></span>

泛型

泛型的作用就是为了约束你传入对象的类型;

通俗来讲:传进去什么,拿出来什么。

•    起因:

–  JDK1.4曾经类型不明白:

•   装入集合的类型都被当作Object对待,从而失去自己的实际类型。

•   从集合中取出时往往须要转型。效率低,easy产生错误。

•    解决的方法:

–  在定义集合的时候同一时候定义集合中对象的类型

•   能够在定义Collection的时候指定

•   也能够在循环时用Iterator指定

•    优点:

–  增强程序的可读性和稳定性

Demo

  1. <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
  2. public class MapTest1 {
  3. public staticvoid main(String args[]) {
  4. Map<String,Integer> m = new HashMap<String, Integer>();
  5. for(int i = 0; i < 5; i++) {
  6. m.put(String.valueOf(i),1);
  7. }
  8. for(int i = 0; i < 5; i++) {
  9. m.put(String.valueOf(i),1);
  10. }
  11. System.out.println(m.size()+ " distinct words detected:");
  12. System.out.println(m);
  13. Set<String>set = m.keySet();
  14. Iteratorit = set.iterator();
  15. while(it.hasNext()) {
  16. System.out.println(m.get(it.next()));
  17. }
  18. }
  19. }</span></span>

增强for循环

•     增强的for循环对于遍历array 或 Collection的时候相当简便

•     缺陷:

–    数组:

•     不能方便的訪问下标值

–    集合:

•     与使用Iterator相比,不能方便的删除集合中的内容

•     总结:

–    除了简单遍历并读出当中的内容外。不建议使用增强for

业务思想

JAVA提供的这个接口专门约束我们容器的实现类,从非常大程度上减轻了我们设计人员的负担。提高效率。

容器类的总结相对来说是比較零散的知识点,非常难完整的讲述出来。在不断的使用中,能够得到更好地理解。

[JAVA &#183; 0基础]:19.容器类的更多相关文章

  1. [JAVA &#183; 0基础]:16.经常使用类

    基本类型包装 为什么须要包装类? JAVA并非纯面向对象的语言.Java语言是一个面向对象的语言.可是Java中的基本数据类型却是不面向对象的.可是我们在实际使用中常常须要将基本数据转化成对象,便于操 ...

  2. [JAVA &#183; 0基础]:3.转义字符

    定义 全部的ASCII码都能够用"\"加数字(通常是8进制数字)来表示.而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\ ...

  3. [JAVA &#183; 0基础]:11.终结者-final

    关于finalkeyword的总结,是非常easy学习和掌握的,大致分为用final修饰的符号常量.类.方法.属性四部分.而这四部分的内容也是我们必须掌握的,非常有用.在项目中常常来利用finalke ...

  4. Java入门 - 语言基础 - 19.方法

    原文地址:http://www.work100.net/training/java-method.html 更多教程:光束云 - 免费课程 方法 序号 文内章节 视频 1 概述 2 方法的定义 3 方 ...

  5. 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载

    目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...

  6. _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

  7. Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观

    Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java  ...

  8. JAVA思维导图系列:多线程0基础

    感觉自己JAVA基础太差了,又一次看一遍,已思维导图的方式记录下来 多线程0基础 进程 独立性 拥有独立资源 独立的地址 无授权其它进程无法訪问 动态性 与程序的差别是:进程是动态的指令集合,而程序是 ...

  9. 0基础的小白怎么学习Java?

    自身零基础,那么我们应该先学好Java,首先我们来了解下Java的特性: Java语言是简单的 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java.另一方面,Jav ...

随机推荐

  1. ACboy needs your help-分组背包模板题

    id=17676" target="_blank" style="color:blue; text-decoration:none">ACboy ...

  2. Private strand flush not complete错误

    Private strand flush not complete错误 (2013-10-22 11:04:58) 转载▼   分类: FAQ 最近的一个报表系统数据库,总是出现checkpoint ...

  3. HDU2491 Priest John&#39;s Busiest Day

    题目链接 题意: 有n个人要进行乒乓球比赛,每一个人都一个能力值.每一个人出现的次序就是他们住的位置 如今要求进行一场比赛,三个人,裁判的能力值在两个选手之间,住的位置也在两个人的之间 问这样的比赛一 ...

  4. 使用pip安装tensorflow 0.80,python 使用tensorflow 0.80遇到的问题及处理方法

    http://blog.csdn.net/levy_cui/article/details/51251095 1.python 版本切换到2.7 推荐使用pythonbrew,http://blog. ...

  5. Struts2--百度百科

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构差别 ...

  6. 获取 input 输入框的值

    1.使用原生javascript: 方法一: <html> <head> <script language="javascript"> func ...

  7. HTML 5 中WebStorage实现数据本地存储

    webstorage 分sessionStorage和localstorage,sessionStorage是暂时保存,localStorage是永久保存. sessionStorage假设浏览器关闭 ...

  8. 《深入理解jvm》笔记---第七章

    虚拟机类载入机制 1. 类的生命周期: 载入.验证.准备.解析.初始化.使用.卸载七个阶段.当中验证.准备.解析三个阶段统称为连接. 当中,解析的阶段的时机并不一定. 2. Java类载入的时机: J ...

  9. C语言字符串操作总结大全(超具体)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  10. hdu1509(Windows Message Queue) 优先队列

    点击打开链接 Problem Description Message queue is the basic fundamental of windows system. For each proces ...