java基础(13)---集合框架
一、集合框架
Java的集合类是一些非常实用的工具类,主要用于存储和装载数据 (包括对象),因此,Java的集合类也被成为容器。在Java中,所有的集合类都位于java.util包下,这些集合类主要是基于两个根接口派生而来,它们就是 Collection和 Map。
Collection接口:
Collection派生出三个子接口,
Set代表不可重复的无序集合、
List代表可重复的有序集合、
Queue是java提供的队列实现,
通过它们不断的扩展出很多的集合类,例如Vector、ArrayList、LinkedList、Deque等,其分布图如下:

Map接口
Map接口是和Collection同等级的根接口,它表示一个键值对(key-value)的映射,每一个key对应一个value,查找Map中的数据,总是根据key来获取,所以key是不可重复的,它用于标识集合里的每项数据。跟Collection一样,Map接口派生了很多的集合子类,这是Map的体系架构图:

二、collection
https://www.cnblogs.com/IT-LFP/p/10965611.html
Vector、ArrayList、LinkedList这3者都是实现集合框架的List,也就是所谓的有序集合,因此具体功能也比较近似,比如都可以按照位置进行定位、添加或者删除的操作,都提供迭代器遍历其内容。但因为具体的设计区别,在行为、性能、线程安全等方面。表现又有很大不同。
1、List
List 是一个接口,不能实例化,需要一个具体类来实现实例化。List 集合中的对象按照一定的顺序排放,里面的内容可以重复。 List 接口实现的类有:ArrayList(实现动态数组),Vector(实现动态数组),LinkedList(实现链表),Stack(实现堆栈)。
1、ArrayList
ArrayList是应用更加广泛的动态数组实现,它本身不是线程安全的,所以性能要好很多。与Vector近似,ArrayList也是可以根据需要调整容量,不过两者的调整逻辑有区别,Vector在扩容时会提高一倍,而ArrayList会增加50% .
2、vector
Vector是Java早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。Vector内部是使用对象数组来保存数据,可以根据需要来自动的增加容量,当数组已满时,会创建新的数组,并copy原有数据。
3、 LinkedList
是Java提供的双向链表。它不需要象上面两种那样调整容量,它也不是线程安全的。
arraylist、vector和linkedlist比较:
Vector和ArrayList作为动态数组,其内部元素以数组形式顺序存储,所以非常适合随机访问的场合。除了尾部插入和删除元素,往往性能会较差,比如我们在中间位置插入一个元素,需要移动后面所有元素。
而LinkedList进行节点插入删除要高效很多,但是随机访问性能则要比动态数组慢。
三、Map
1、HashMap
1、导包
import java.util.Map;
import java.util.HashMap;
2、方法:
put(Object key,Object value) // 添加
putAll(Collection c) // 添加
get(Object key) //根据键来获取对应的值
containsKey(Object key) // 是否包含key
containsValue(Object value) // 是否包含value
remove(Object key) //删除key
values() //获取所有的values
isEmpty() //判断Map是否为空
entrySet() //
keySet() //获取所有的key,返回的是Set
举例:
//创建HashMap
HashMap<String,String> hm1 = new HashMap<String,String>();
HashMap<String,String> hm2 = new HashMap<String,String>(); String [] key = {"name","age","tender"};
String [] value = {"zhangsan","16","men"}; //添加元素
//hm2
hm2.put("id","012");
hm2.put("describe", "zhangdelaohaokanle"); //hm1一个一个添加
for(int i = 0;i<3;i++){
hm1.put(key[i], value[i]);
}
//hm1直接全添加
hm1.putAll(hm2); //根据key获取值
String name = hm1.get("name"); //hm1是否包含value, key
boolean flag = hm1.containsValue("013");
boolean flag = hm1.containsKey("age"); //hm1删除并返回
String des = hm1.remove("describe") //获取所有的values
Collection<String> li = hm1.values(); //获取所有的keys
Set<String> set = hm1.keySet();
3、遍历:
package test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map.Entry;
import java.util.Set;
public class test6 { public static void main(String[] args) {
HashMap<String,Integer> map =new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4); // Map map=new HashMap();
// map.put("a", "aaa");
// map.put("b", "bbb");
// map.put("c", "ccc");
// map.put("d", "ddd"); //hashMap遍历方法1
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println("map.get(key) is :"+map.get(key));
} //遍历方法2
Set<Map.Entry<String, Integer>> set=map.entrySet();
Iterator<Map.Entry<String, Integer>> it=set.iterator();
while(it.hasNext()){
//System.out.println(list.get(0) );
Map.Entry<String, Integer> e=it.next();
System.out.println(e.getKey()+":"+e.getValue());
} System.out.println(map.containsValue(1) );
System.out.println(map.containsKey("a") );
System.out.println(map.size() );
System.out.println(map.remove("a") );
System.out.println(map.size() );
System.out.println(map.containsKey("a") );
System.out.println(map.containsValue(1) ); //ArrayList <Integer> list =(ArrayList<Integer>)map.values();
//上面会出现异常,因为map.values()返回的是一个Collection<Integer>对象,可用下面的方法解决
ArrayList <Integer> list =new ArrayList<Integer>(map.values());
Iterator <Integer>ite=list.iterator();
while(ite.hasNext()){
//System.out.println(list.get(0) );
System.out.println(ite.next() );
}
map.clear();
System.out.println(map.isEmpty() ); } }
length、length()和size区别:
- length
length是针对各种数组的属性,比如int[], char[], byte[], string[];
- length()
length()是针对String的方法,一般用于 if(s == null || s.lenght() == 0){return ;}
- size()
size()是针对集合类的方法, 一般用于 Set( HashSet,TreeSet), List(ArrayList, LinkedList), Map(HashMap, SortedMap..等) 这些集合类获取集合元素的数量。
https://blog.csdn.net/i000zheng/article/details/78850165
https://www.cnblogs.com/zz22--/p/10753284.html
https://blog.csdn.net/weixin_41434306/article/details/88582800
java基础(13)---集合框架的更多相关文章
- Java基础--说集合框架
		版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ... 
- 黑马程序员——【Java基础】——集合框架
		---------- android培训.java培训.期待与您交流! ---------- 一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是 ... 
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
		一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ... 
- Thinking in java基础之集合框架(转载)
		集合简介(容器)把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成一个东西(一个对象),然后我们借用袋子把这20个苹果装起来,而这个袋子就是集合(也叫 ... 
- Java基础之集合框架(Collection接口和List接口)
		首先我们说说集合有什么作用. 一.集合的作用 1.在类的内部,对数据进行组织: 2.简单而快速的搜索大数量的条目: 3.有的集合接口,提供一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关 ... 
- java基础之集合框架
		6.集合框架: (1)为什么出现集合类? 面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储. 集合就是存储对象最常用的一种方式. (2)数组和集合都是容器,两者有何不同 ... 
- Java基础之集合框架——在文件中存储地图(TryPhoneBook2)
		控制台程序. import java.io.*; public class Person implements Comparable<Person>, Serializable { // ... 
- Java基础之集合框架——使用HashMap地图(TryPhoneBook1)
		控制台程序. 首先改进Peron类,使Person可以在地图中用作键,进而存储电话簿中的项.必须添加equals()方法并重写默认的hashCode()方法. import java.io.*; pu ... 
- Java基础之集合框架——使用堆栈Stack<>对象模拟发牌(TryDeal)
		控制台程序. public enum Rank { TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, A ... 
- Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)
		控制台程序. public class Person implements Comparable<Person> { // Constructor public Person(String ... 
随机推荐
- 【RSR】RSR如何配置BGP与BFD联动(动态路由)
			应用场景 企业租用运营商MSTP线路,配置BGP路由协议上网,由于企业本端出口路由器无法检测到运营商中间链路通信中断,导致路由收敛缓慢,无法快速的切换到其它备份线路,此时可以在路由器上启用BGP与BF ... 
- 从Asp .net到Asp core (第二篇)《Asp Core 的生命周期》
			前面一篇文章简单回顾了Asp .net的生命周期,也简单提到了Asp .net与Asp Core 的区别,我们说Asp Core不在使用Asp.netRuntime,所以它也没有了web程序生命周期中 ... 
- !与&&优先级的问题
			逻辑否(!)是一元操作符,逻辑与(&&)是二元操作符,一元操作符的优先级高于任何二元操作符. 例如: bool flag:int t: if(!flag && t &g ... 
- 【C++札记】友元
			C++封装的类增加了对类中数据成员的访问限制,从而保证了安全性.如想访问类中的私有成员需要通过类中提供的公共接口来访问,这样间接的访问方式,无疑使得程序的运行效率有所降低. 友元的提出可以使得类外的函 ... 
- Python-14-常用模块
			一.time&datatime 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 ... 
- xorm实例-创建xorm,映射
			创建xorm引擎 //在xorm里面,可以同时存在多个Orm引擎,一个Orm引擎称为Engine, //一个Engine一般只对应一个数据库. //Engine通过调用`xorm.NewEngine` ... 
- condition的使用
			condition 的作用:条件锁 需求: 按需执行三个线程. 用wait,notify的方式: /** * 有序线程 wait,notify版 */ public class OrderThread ... 
- golang---获取windows系统相关信息
			package main import ( "fmt" "net" "runtime" "strings" " ... 
- [高清] Java从入门到精通第3版
			------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ... 
- AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersion 区别
			AssemblyVersion: 几乎保留在.NET内部,AssemblyFileVersion: 就是Windows所见.如果您转到位于目录中的程序集的属性并切换到版本选项卡, 映射到“文件版本”A ... 
