集合框架三大内容:对外的接口、接口的实现和对集合运算的算法

集合有三大类接口:List、Set、Map

共同点:都是集合接口,都可以用来存储很多对象

不同:Collection接口存储一组不唯一(允许重复)、无序的对象

  • Set接口继承自Collection接口,存储一组唯一(不允许重复)、无序的对象
  • List接口继承自Collection接口,存储一组不唯一(允许重复)、有序(以元素插入的次序来放置元素,不会重新排列)的对象。

Map接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。Map中的key不要求有序,不允许重复,value同样不要求有序,但允许重复。

  • Iterator接口是负责定义访问和遍历元素的接口。

List接口的常用类有ArrayList和LinkedList。可以容纳所有类型的对象,包括null,允许重复,并保证元素的存储顺序。

ArrayList:在内存中分配连续的空间,优点在于遍历元素和随机访问元素的效率比较高。

Vector和ArrayList的不同

实现原理、功能相同

区别:Vector线程安全,ArrayList重速度轻安全,非安全

长度增长时Vector默认增长一倍,ArrayList增长一半

Hashtable和HashMap异同

相同:实现原理、功能相同

不同:Hashtable继承Dictionary类,HashMap实现Map接口

Hashtable安全,HashMap线程非安全

Hashtable不允许null值,HashMap允许null值5

ArrayList接口中定义的常用常用方法

方法名称

说明

boolean add(对象名)

在末尾顺序添加元素,从索引位置0开始

void add(下标位置,对象名)

在指定的索引位置添加元素,原索引位置及其后面的元素依此后移

集合名.size()

返回列表中元素的个数

Object get(下标)

返回指定索引位置处的元素

boolean contains(对象名)

判断列表中是否存在指定元素

集合名 remove(对象名)

从列表中删除元素

集合名 remove(下标)

从列表中删除指定位置元素,起始索引位置从0开始

LinkedList:采用链式存储方式,优点在于插入、删除元素时效率比较高,检索时速度慢。提供了addFirst()、addLast()、removeFirst()、removeLast()等方法,可以在首位进行插入或删除操作。使得LinkedList可被作为堆栈(stack)或队列(queue)。

LinkedList特殊方法

方法名称

说明

void addFirst(对象名)

在列表的首部添加元素

void addLast(对象名)

在列表末尾添加元素

Object getFirst()

返回列表中的第一个元素

Object getLast()

返回列表中的最后一个元素

Object removeFirst()

删除并返回列表中的第一个元素

Object removeLast()

删除并返回列表中的最后一个元素

Map接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。

Map中的key不要求有序,不允许重复。

value不要求有序,允许重复。

常用Map实现类是HashMap,存储方式是哈希表,也称为散列表,根据(key value)直接进行访问。

存放记录的数组称为散列表。

Map的常用方法

方法名称

说明

Object put(Object key,Object value)

以”键-值对”的方式存储

注意:键必须是唯一的,值可以重复,如果添加重复的键,那会替换原来的键

Object get(Object key)

根据键返回相关联的值,若不存在指定的键,则返回null

Object remove(Object key)

删除指定的键映射的”键-值对”

int size()

返回元素个数

Set keySet()

返回键的集合

Collection values()

返回值的集合

boolean containsKey(Object key)

若存在指定的键映射的”键-值对”,则返回true

boolean isEmpty()

若不存在键-值对映射关系,则返回true

void clear()

从此映射中移除所有的映射关系

遍历map几种方式

public static void main(String[] args) {

Map<String, String> map = new HashMap<String, String>();

map.put("1", "value1");

map.put("2", "value2");

map.put("3", "value3");

//第一种:普遍使用,二次取值

System.out.println("通过Map.keySet遍历key和value:");

for (String key : map.keySet()) {

System.out.println("key= "+ key + " and value= " + map.get(key));

}

//第二种

System.out.println("通过Map.entrySet使用iterator遍历key和value:");

Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();

while (it.hasNext()) {

Map.Entry<String, String> entry = it.next();

System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

}

//第三种:推荐,尤其是容量大时

System.out.println("通过Map.entrySet遍历key和value");

for (Map.Entry<String, String> entry : map.entrySet()) {

System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

}

//第四种

System.out.println("通过Map.values()遍历所有的value,但不能遍历key");

for (String v : map.values()) {

System.out.println("value= " + v);

}

}

迭代器Iterator

Iterator为集合而生,专门实现集合的遍历。隐藏各种集合实现类的内部细节。提供遍历结合的统一接口。

Collection接口的iterator()方法返回一个Iterator,然后通过Iterator接口的两个方法遍历

boolean hasNext():判断是否存在另一个可访问的元素

Object next():返回要访问的下一个元素

泛型集合

在创建对象时指定集合中元素的类型,从集合中取出元素时无须进行类型强制转换,并且如果把非指定类型对象放入集合,会出现编译错误。

List<E> 对象名=new ArrayList<E>();

如List<Dog> dogs = new ArrayList<Dog>();

Map<String,Dog> dogMap=new HashMap<String,Dog>();

Map<K,V> 对象名Map=new HashMap<K,V>();

包装常用构造方法

public Type(type value)

Type代表包装类,type代表基本类型。

一旦创建了某个包装对象,该对象所代表的值就不能改变了。

常用的类型转换

包装类->基本类型

public type typeValue()

字符串->基本类型

public static type parseType(String type)

JAVAOOP集合框架的更多相关文章

  1. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  2. 【目录】JUC集合框架目录

    JUC集合框架的目录整理如下: 1. [JUC]JUC集合框架综述 2. [JUC]JDK1.8源码分析之ConcurrentHashMap(一) 3. [JUC]JDK1.8源码分析之Concurr ...

  3. java面试题——集合框架

    先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...

  4. Java使用实现面向对象编程:第七章集合框架的解读=>重中之重

    对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...

  5. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  6. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  7. Java 之 集合框架(JCF)

    1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...

  8. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  9. 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)

    一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...

随机推荐

  1. python的变量命名及其使用

    以下内容皆从书本自学 ,归纳. 1. 变量名只能包含字母.数字和下划线.变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message. 2. ...

  2. agc027D - Modulo Matrix(构造 黑白染色)

    题意 题目链接 构造一个\(n * n\)的矩阵,要求任意相邻的两个数\(a,b\),使得\(max(a,b) \% min(a,b) \not = 0\) Sol 我的思路: 假设\(mod = 1 ...

  3. 基于表单布局:分析过时的table结构与当下的div结构

    一些话在前面 最近做了百度前端学院一个小任务,其中涉及到表单布局的问题, 它要处理的布局问题:左边的标签要右对齐,右边的输入框.单选按钮等要实现左对齐. 从开始入门就被告知table布局已经过时了,当 ...

  4. 跨平台图表控件TeeChart使用教程:将图表数据导出为XML格式

    在开发者使用TeeChart进行开发的过程中,不管是在设计时或者运行时都可以使用的图表导出对话框将图表数据轻易地导出为XML格式: TeeChart最新版那下载地址 上图为TeeChart导出对话框的 ...

  5. Android - 通过真实案例学习解内存泄漏问题,最终发现Android原生Bug

    作为一个Android新手小白,刚到新公司,最近的工作就是在学习解各类Bug.转型之初,面临各种新知识,会有压力,但是学习的过程是快乐的. 上周刚遇上一类bug,就是应用的内存泄漏问题.最终通过前辈的 ...

  6. JSP 里 的 basePath

    Eclipse新建JSP页面的时候不会加上 base 这个变量,需要手动添加,经常忘记,MyEclipse 就不用管了会自动添加. 如果忘了下面代码直接copy即可: <% String pat ...

  7. Excel操作之VLOOKUP函数

    1.作用 VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能.功能 ...

  8. ASP.NET Core - 初期准备

    微软在前不久发布了.NET Core1.0(以下简称Core),由于项目需要开始对其进行研究,希望将自己踩过的坑和见解分享给大家. Core和Framework4.6是属于并行产品,前者侧重于跨平台的 ...

  9. 笨办法学Python(三十七)

    习题 37: 复习各种符号 现在该复习你学过的符号和 python 关键字了,而且你在本节还会学到一些新的东西.我在这里所作的是将所有的 Python 符号和关键字列出来,这些都是值得掌握的重点. 在 ...

  10. ubuntu 显示隐藏文件

    原文链接 http://blog.csdn.net/happyjiahan/article/details/6023496 方法1.使用命令ls -a显示所有的文件,包括隐藏文件 方法2.在桌面化操作 ...