[JAVA · 0基础]:19.容器类
概述
容器 就是存放数据的一个集合
(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
- <span style="font-size:18px;"><span style="font-size:18px;">public class Person {
- private intid;
- private Stringname;
- public Person(int id, String name) {
- this. id= id; this. name = name;
- }
- public intgetId() { return id; }
- public StringgetName() { return name; }
- public voidsetId (int id) {
- this. id= id;
- }
- public voidsetName (String name) {
- this.name = name;
- }
- public StringtoString() {
- return “id: ” + id + “|name: ” + name;
- }
- }
- ========================================================================
- import java.util.*;
- public class CollectionTest1 {
- public staticvoid main (String[] args) {
- Collectionc = new HashSet();
- c. add(new Person(1, “c++"));
- c. add(new Person(2, “java"));
- System.out.println(c. size() + ": " + c);
- System.out.println("contains: " + c. contains (new Person(2, "java")));
- System.out.println(c. remove (new Person(2, " java")));
- System.out.println(c. size() + ": " + c);
- }
- }</span></span>
输出结果:
Iterator接口
• 全部实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。
• Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
• Iterator接口定义了例如以下方法:
Demo
- <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
- public class IteratorTest1 {
- public staticvoid main(String[] args) {
- Collectionc = new ArrayList();
- c.add("good"); c.add("morning");
- c.add("key"); c.add("happy");
- for(Iterator it = c.iterator(); it.hasNext(); ) {
- Stringtem = (String) it.next();
- if(tem.trim().length() <= 3) {
- it.remove();
- }
- }
- System.out.println(c);
- }
- }
- </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
- <span style="font-size:18px;">import java.util.*;
- public class SetTest {
- public staticvoid main (String[] args) {
- Set s =new HashSet();
- s.add("hello");
- s.add("world");
- s.add(new Integer(4));
- s.add(new Double(1.2));
- s.add("hello"); // 同样的元素不会被增加
- System.out.println(s);
- }
- }
- </span>
List接口
• List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的。并且能够反复。
• List 容器中的元素都相应一个整数型的序号记载其在容器中的位置,能够依据序号存取容器中的元素。
• J2SDK 所提供的 List 容器类有 ArrayList。LinkedList 等。
Demo
- <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
- public class ListTest {
- public staticvoid main(String[] argc) {
- List l1= new ArrayList();
- for (inti = 0; i <= 5; i++)
- l1.add("a"+ i);
- System.out.println(l1);
- list.add(3,"a100");
- System.out.println(l1);
- list.set(6,"a200");
- System.out.println(list);
- System.out.print((String)list.get(2) + " ");
- System.out.println(list.indexOf("a3"));
- list.remove(1);
- System.out.println(list);
- }
- }</span></span>
经常使用算法
类 java.util.Collections 提供了一些静态方法实现了基于List容器的一些经常使用算法。
Demo
- <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
- public class CollectionsTest {
- publicstatic void main(String[] argc) {
- List aList =new ArrayList();
- for (int i = 0;i < 5; i++)
- aList.add("a"+ i);
- System.out.println(aList);
- Collections.shuffle(aList);// 随机排列
- System.out.println(aList);
- Collections.reverse(aList);// 逆续
- System.out.println(aList);
- Collections.sort(aList);// 排序
- System.out.println(aList);
- System.out.println(Collections.binarySearch(aList,"a2"));
- Collections.fill(aList,"hello");
- System.out.println(aList);
- }
- }
- </span></span>
Comparable接口
问题:上面的算法依据什么确定集合中对象的“大小”顺序?
• 全部能够“排序”的类都实现了java.lang.Comparable 接口,Comparable接口中仅仅有一个方法
public int compareTo(Objectobj);
该方法:
• 实现了Comparable 接口的类通过实现 comparaTo 方法从而确定该类对象的排序方式。
Demo
- <span style="font-size:18px;"><span style="font-size:18px;">public class Student implements Comparable {
- private Stringname;
- private Integerscore;
- publicStudent(String name, int score) {
- this.name =name;
- this.score =new Integer(score);
- }
- public intcompareTo(Object o) {
- Student n =(Student) o;
- int a =score.compareTo(n.score);
- return (a !=0 ?
- a : name.compareTo(n.name));
- }
- public StringtoString() {
- return"name: " + name + " score: " + score.toString();
- }
- }
- import java.util.*;
- public class StudentTest {
- public static voidmain(String[] args) {
- List l1 = newLinkedList();
- l1.add(newStudent(“ttt", 66));
- l1.add(newStudent(“bbb", 77));
- l1.add(newStudent(“ccc", 99));
- l1.add(newStudent(“fff", 88));
- l1.add(newStudent(“aaa", 66));
- System.out.println(l1);
- Collections.sort(l1);
- System.out.println(l1);
- }
- }</span></span>
Map接口
• 实现Map接口的类用来存储键(key)-值(value) 对。
• Map 接口的实现类有HashMap和TreeMap等。
• Map类中存储的键-值对通过键来标识。所以键值不能反复。
Demo
- <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
- public class MapTest {
- public staticvoid main(String args[]) {
- Map m1 =new HashMap();
- Map m2 =new TreeMap();
- m1.put("one",new Integer(1));
- m1.put("two",new Integer(2));
- m1.put("three",new Integer(3));
- m2.put("A",new Integer(1));
- m2.put("B",new Integer(2));
- System.out.println(m1.size());
- System.out.println(m1.containsKey("one"));
- System.out.println(m2.containsValue(newInteger(1)));
- if(m1.containsKey("two")) {
- inti = ((Integer) m1.get("two")).intValue();
- System.out.println(i);
- }
- Map m3 =new HashMap(m1);
- m3.putAll(m2);
- System.out.println(m3.size());
- }
- }</span></span>
泛型
泛型的作用就是为了约束你传入对象的类型;
通俗来讲:传进去什么,拿出来什么。
• 起因:
– JDK1.4曾经类型不明白:
• 装入集合的类型都被当作Object对待,从而失去自己的实际类型。
• 从集合中取出时往往须要转型。效率低,easy产生错误。
• 解决的方法:
– 在定义集合的时候同一时候定义集合中对象的类型
• 能够在定义Collection的时候指定
• 也能够在循环时用Iterator指定
• 优点:
– 增强程序的可读性和稳定性
Demo
- <span style="font-size:18px;"><span style="font-size:18px;">import java.util.*;
- public class MapTest1 {
- public staticvoid main(String args[]) {
- Map<String,Integer> m = new HashMap<String, Integer>();
- for(int i = 0; i < 5; i++) {
- m.put(String.valueOf(i),1);
- }
- for(int i = 0; i < 5; i++) {
- m.put(String.valueOf(i),1);
- }
- System.out.println(m.size()+ " distinct words detected:");
- System.out.println(m);
- Set<String>set = m.keySet();
- Iteratorit = set.iterator();
- while(it.hasNext()) {
- System.out.println(m.get(it.next()));
- }
- }
- }</span></span>
增强for循环
• 增强的for循环对于遍历array 或 Collection的时候相当简便
• 缺陷:
– 数组:
• 不能方便的訪问下标值
– 集合:
• 与使用Iterator相比,不能方便的删除集合中的内容
• 总结:
– 除了简单遍历并读出当中的内容外。不建议使用增强for
业务思想
JAVA提供的这个接口专门约束我们容器的实现类,从非常大程度上减轻了我们设计人员的负担。提高效率。
容器类的总结相对来说是比較零散的知识点,非常难完整的讲述出来。在不断的使用中,能够得到更好地理解。
[JAVA · 0基础]:19.容器类的更多相关文章
- [JAVA · 0基础]:16.经常使用类
基本类型包装 为什么须要包装类? JAVA并非纯面向对象的语言.Java语言是一个面向对象的语言.可是Java中的基本数据类型却是不面向对象的.可是我们在实际使用中常常须要将基本数据转化成对象,便于操 ...
- [JAVA · 0基础]:3.转义字符
定义 全部的ASCII码都能够用"\"加数字(通常是8进制数字)来表示.而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\ ...
- [JAVA · 0基础]:11.终结者-final
关于finalkeyword的总结,是非常easy学习和掌握的,大致分为用final修饰的符号常量.类.方法.属性四部分.而这四部分的内容也是我们必须掌握的,非常有用.在项目中常常来利用finalke ...
- Java入门 - 语言基础 - 19.方法
原文地址:http://www.work100.net/training/java-method.html 更多教程:光束云 - 免费课程 方法 序号 文内章节 视频 1 概述 2 方法的定义 3 方 ...
- 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载
目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...
- _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
- Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观
Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java ...
- JAVA思维导图系列:多线程0基础
感觉自己JAVA基础太差了,又一次看一遍,已思维导图的方式记录下来 多线程0基础 进程 独立性 拥有独立资源 独立的地址 无授权其它进程无法訪问 动态性 与程序的差别是:进程是动态的指令集合,而程序是 ...
- 0基础的小白怎么学习Java?
自身零基础,那么我们应该先学好Java,首先我们来了解下Java的特性: Java语言是简单的 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java.另一方面,Jav ...
随机推荐
- ACboy needs your help-分组背包模板题
id=17676" target="_blank" style="color:blue; text-decoration:none">ACboy ...
- Private strand flush not complete错误
Private strand flush not complete错误 (2013-10-22 11:04:58) 转载▼ 分类: FAQ 最近的一个报表系统数据库,总是出现checkpoint ...
- HDU2491 Priest John's Busiest Day
题目链接 题意: 有n个人要进行乒乓球比赛,每一个人都一个能力值.每一个人出现的次序就是他们住的位置 如今要求进行一场比赛,三个人,裁判的能力值在两个选手之间,住的位置也在两个人的之间 问这样的比赛一 ...
- 使用pip安装tensorflow 0.80,python 使用tensorflow 0.80遇到的问题及处理方法
http://blog.csdn.net/levy_cui/article/details/51251095 1.python 版本切换到2.7 推荐使用pythonbrew,http://blog. ...
- Struts2--百度百科
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构差别 ...
- 获取 input 输入框的值
1.使用原生javascript: 方法一: <html> <head> <script language="javascript"> func ...
- HTML 5 中WebStorage实现数据本地存储
webstorage 分sessionStorage和localstorage,sessionStorage是暂时保存,localStorage是永久保存. sessionStorage假设浏览器关闭 ...
- 《深入理解jvm》笔记---第七章
虚拟机类载入机制 1. 类的生命周期: 载入.验证.准备.解析.初始化.使用.卸载七个阶段.当中验证.准备.解析三个阶段统称为连接. 当中,解析的阶段的时机并不一定. 2. Java类载入的时机: J ...
- C语言字符串操作总结大全(超具体)
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...
- hdu1509(Windows Message Queue) 优先队列
点击打开链接 Problem Description Message queue is the basic fundamental of windows system. For each proces ...