JAVA容器

JAVA容器

容器的概念:容器指的是用于存放多个对象的类,这些类能够对对象进行存储、检索、管理等操作。

可以把容器类比于背包,对象类比于书,书包是用来装书的,用书包携带书也更加的方便。

容器的接口是Collection,实现类为Collections。

List 列表

1.ArrayList,LinkedList与数组的区别:

List包含 ArrayList 和 LinkedList,Java中数组是不可变长的,而ArrayList可以被认为是可变长的数组。ArrayList是线性结构,优点是随机存取,存储密度大;LinkedList是链式结构,优点是插入删除更加方便。一般在Java业务开发中,查询操作使用的更多,ArrayList的使用更加广泛。

由于ArrayList和LinkedList都基于List接口实现,所以它们的方法是一致的。

2.List的常用方法
//创建一个列表
List list = new ArrayList();
//列表中增加元素
list.add(x);
//列表中删除元素
list.remove(x);
//获得list的长度
list.size();
//获取第i个位置上的元素,得到的元素类型是Object,需进行向下转型,强转
//以list中元素类型为String举例,自定义类型同样可以使用
String ss = (String) list.get(i);
//判断x是否在列表中
if(list.contains(x))
	sout(1);
else
	sout(0);
//对列表进行排序
list.sort();
3.遍历列表

(1)索引方法

for(i=0;i<list.size();i++)
	sout(list.get(i));

(2) iterator方法

Iterator it = list.Iterator();
while(it.hasNext())
{
	sout(it.next());
}

(3)增强for

for(String s:list)
	sout(s);
4.列表的泛型

泛型:使用泛型,你可以创建可重用的组件,这些组件能够处理多种数据类型,同时还能保证类型安全。泛型用<>表示,中间可以放各种的类

List<String> lst = new ArrayList<String>();  //其中第二个尖括号中的String可以省略
//在使用泛型的时候,强制转换即可取消,通过get方法直接拿到String类或自定义类
String ss = lst.get(i);
//假设定义了Singer类
public class Singer{
}

List<Singer> lst = new ArrayList<Singer>();  //其中第二个尖括号中的Singer可以省略
//在使用泛型的时候,强制转换即可取消,通过get方法直接拿到自定义类
Singer ss = lst.get(i);

Set 集合

1.HashSet,TreeSet的区别

集合的特点是集合中的元素均不重复。

  • HashSet​:平均情况下,插入和删除操作的时间复杂度为 O(1),但在哈希冲突严重时,性能会有所下降。HashSet得到的集合是无序的。
  • TreeSet​:插入和删除操作的时间复杂度为 O(logn),因为需要维护红黑树的平衡。TreeSet得到的集合是升序的。
2.Set中常用方法
//创建一个集合
Set set = new HashSet();
//集合中添加元素
set.add(x);
//集合中删除元素
set.remove(x);
//集合的长度
set.size();
//集合中包含某元素
set.contains(x);
3.集合的遍历

(1) 迭代器

Set set = new HashSet();
set.add(1);
set.add(2);
set.add(3);

Iterator it = set.Iterator();
while(it.hasNext())
{
	Integer i = (Integer)it.next(); //注意集合中的元素都是对象,而不是基本数据类型
	sout(i);
}

(2) 增强for

for(Integer x:set)
	sout(x);
4.集合的泛型

集合同样可以使用泛型,来规定集合中元素的类型是什么。

Set<String> set = new HashSet<String>();
//假设添加了多个字符串元素

Iterator it = set.Iterator();
while(it.hasNext())
{
	String ss = it.next(); //无需强转换,向下转型
	sout(ss);
}

Map 映射

1.HashMap和TreeMap

映射中存储的是键值对 key==value,或者说是key:value,类似于python中的字典类型数据。这种键值对类型可以很方便的让我们通过key来找到对应的value,比如家中电话本就常用这种格式,通过姓名,找到对应的电话号码。

  • HashSet​:平均情况下,插入和删除操作的时间复杂度为 O(1),但在哈希冲突严重时,性能会有所下降。HashSet得到的集合是无序的。
  • TreeSet​:插入和删除操作的时间复杂度为 O(logn),因为需要维护红黑树的平衡。TreeSet得到的集合是按key升序排列的。
2.Map中的常用方法
//创建一个Map
Map map = new HashMap();
//向map中添加元素
map.put(key,value); //注意有两个参数,第一个参数是键,第二个参数是值,它们是一一对应的
//map删除某个键值对
map.remove(key);
map.remove(key,value);
//map的长度
map.size()//通过key,获得对应的value
map.get(key);
//获得由map中的key组成的集合
map.keySet();
3.Map的遍历方法

(1)通过迭代器和集合来遍历

Map map = new HashMap();
map.put("小王","10086");
map.put("小红","12345");
map.put("小绿","114514");

Set set = map.keySet();//通过键集合辅助遍历map
Iterator it = set.Iterator();
while(it.hasNext())
{
	String key = (String)it.next();
	sout(key + ":" + map.get(key)); //打印键值对
}

(2) 通过迭代器和Entry来遍历

Entry是实体,即Map中真正存储的对象,它就是由key和value组成的键值对。Map.Entry是Map接口中的内部类

Map map = new HashMap();
map.put("小王","10086");
map.put("小红","12345");	
map.put("小绿","114514");

Set set = map.entrySet();
Iterator it = set.Iterator();
while(it.hasNext())
{
	Map.Entry entry = (Map.Entry) it.next();
	sout(entry.getKey());
	sout(entry.getValue());
}
4.映射的泛型

映射同样可以使用泛型,来规定键值对分别是什么类型

Map<String,Integer> map = new HashMap<String,Integer>();
//假设添加了多个字符串元素
map.put("小红",10);
map.put("小白",23);	
map.put("小绿",14);

//当键值对不满足对应数据类型时会报错
map.put("小龙","12"); // 此句话会报错

Set set = map.keySet();//通过键集合辅助遍历map
Iterator it = set.Iterator();
while(it.hasNext())
{
	String key = it.next(); //无需强转
	sout(key + ":" + map.get(key)); //打印键值对
}

Stack 栈 和 Queue 队列

栈和队列都可以看成是受限的列表结构,栈满足后入先出的特性,而队列则满足先入先出的特性

Stack 常用方法
//创建一个字符串栈
Stack<String> stack = new Stack<String>();
//压栈
stack.push(x);
//出栈
x = stack.pop();
//查看栈顶元素
String x = stack.peek(); //栈顶元素不会出栈
//判断栈是否为空
stack.isEmpty()
Queue常用方法

Queue包含 LinkedList,ArrayDeque和 PriorityQueue三种

//创建一个字符串队列
Queue<String> q = new Linkedlist<String>();
//入队
q.offer(x);
//出队
q.poll(x);
//获取队头元素
String x = q.peek();
//判断队列是否为空
q.isEmpty()

Collections类的方法

  1. Collections.max(list)​ 获得列表的最大值
  2. Collections.min(list)​ 获得列表的最大值
  3. Collections.sort(list)​ 对列表进行排序
  4. Collections.shuffle​ 打乱列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值