JAVAOOP集合框架
集合框架三大内容:对外的接口、接口的实现和对集合运算的算法
集合有三大类接口: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集合框架的更多相关文章
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 【目录】JUC集合框架目录
JUC集合框架的目录整理如下: 1. [JUC]JUC集合框架综述 2. [JUC]JDK1.8源码分析之ConcurrentHashMap(一) 3. [JUC]JDK1.8源码分析之Concurr ...
- java面试题——集合框架
先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...
- Java使用实现面向对象编程:第七章集合框架的解读=>重中之重
对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
- Java 之 集合框架(JCF)
1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)
一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...
随机推荐
- 链表例题2:链表的倒数第k个节点是多少
解题思想: 1.创建一个结点类(为后面实现链表做基础) 2.创建一个查询倒数元素的方法 3.使用快慢指针的思想(主要的部分) 图中的表示的是查询倒数第k个结点的操作: 创建一个快慢指针后pre(慢指针 ...
- 写英文bug的经验总结
本文链接: https://www.cnblogs.com/hchengmx/p/10800855.html 由于工作原因,开bug的时候需要由英文开,刚开的时候比较痛苦,因为有些词汇老师用的不太准确 ...
- Android 6.0 动态权限申请
1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在 ...
- 微信小程序实现获得用户手机号
具体操作方法如下: 使用方法 需要将 <button> 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumb ...
- 用iSee图片专家制作淘宝店标教程
普通的淘宝店铺都会有店标.店标都显示在店铺首页的显现位置,买家在逛淘宝店的时候,一眼都会瞄到店标.因此,如果可以制作一个专属于自己店铺的店标,可以吸引买家的眼光,也更好地宣传了店铺. 下面就用iSee ...
- 关于 no device found for connection ‘ System eth0′问题
在Vmware上面安装CentOS,开机后,使用:service network restart时,会提示一下错误: Shutting down loopback interface: ...
- 笨办法学Python(二十六)
习题 26: 恭喜你,现在可以考试了! 你已经差不多完成这本书的前半部分了,不过后半部分才是更有趣的.你将学到逻辑,并通过条件判断实现有用的功能. 在你继续学习之前,你有一道试题要做.这道试题很难,因 ...
- Verilog分频器的设计
大三都要结束了,才发现自己太多东西没深入学习. 对于偶分频:(计数到分频数的一半就翻转) 注: 图中只用了一个计数器,当然也可以用多个: 图中只计数到需要分频的一半,当然也可计数到更多: 图中从第一个 ...
- Thymeleaf 随记
一.基础写法: th:text='${数据} ,其中text可以修改成其他,如href,value,class....看需求 <p th:text='${后台返回的数据}'>静态文本&l ...
- 使用Excel消费C4C的OData service
步骤比较简单, 打开Excel的标签Data->From Other Sources->From OData Data Feed: 输入如下url: https://.c4c.saphyb ...