Java集合框架






集合(框架)

概述
Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架。Java程序员在具体应用时,不必要考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率







Java集合框架视图


集合框架接口
Collection:接口存储一组不唯一(可以重复),无序的对象
List: 接口存储一组不唯一,有序(插入先后顺序)的对象,只有
list有下标索引(其实就是实现了变长数组 )
Set: 接口存储一组唯一,无序的对象
Map: 接口存储一组键值对象,提供key(键)到value(值)的映射


List接口实现类
1.ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
2.LinkList采用的是链表存储方式。插入、删除元素时的效率比较高





list接口的常用方法

boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0开始

void add(int intdex,Object o) 在指定下标位置插入元素,但是插入下标的范围0~元素个数,否则会发生越界错误。比如集合 中有3个元素,你就可以在0~3范围内添加,下标4就越界了。

int size() 返回了中元素个数

Object get(int index) 返回索引处的元素

boolean contains(Object o) 判断集合是否包含指定元素

boolean remove(Object o) 删除集合中指定元素

Objectremove(int index) 返回被删除的元素










LinkedList集合类
1.LinkedList采用链表存储方式。插入、删除元素时效率较高

2.常用方法










Set接口
特征:
唯一,无序
1.基本数据类型:值相等就是重复
2.引用数据类型:看对象是否一样,就算两个对象存的信息一模一样,只要用了两个new,他就是两个对象。下面存的就没有重复
Theme theme1=new Theme(1, "1", "1");
Theme theme2=new Theme(1, "1", "1");
set.add(theme1);
set.add(theme2);
无序(无下标):就代表没有get方法,遍历只能靠迭代器Iterrator,

用途:
主要用于呈现信息列表,数据存放无序,非常简单
主要还是用HashSet实现类


实现类:
1.HashSet
Set set = new HashSet<>();
2.TreeSet




Map接口
Map接口的实现类HashMap,TreeMap

Map接口的常用方法

Object put(Object key,Object val ) 以键值对的方式进行存储
Object get(Object key) 根据键返回值,如果不存在指定
键,返回null
Object remove(Object key) 删除指定键映射的值
int size() 返回键值对个数
Set keySet() 返回键的集合
Collection values() 返回值的集合
boolean containsKey(Object key) 如果存在指定键的映射的键值对
,返回true.

map的遍历方法
1.所有键值对中的键,组成成一个set集合
Set set=map.keySet();
System.out.println(set);
2.values所有的值组成的一个集合
Collection col=map.values();
System.out.println(col);
// Iterator iter=col.iterator();
// while(iter.hasNext()) {
// System.out.println(iter.next());
// }
// Iterator iter=set.iterator();
// while(iter.hasNext()) {
// System.out.println(iter.next());
// }
// System.out.println(map);
}
3.获取所有的键和值
entrySet可以得到由所有键值对组成的集合
里边存储的是所有的数据(键-值)
Set<Map.Entry<Integer, String>> entrySet=map.entrySet();
Iterator<Map.Entry<Integer, String>> iter=entrySet.iterator();
while(iter.hasNext()) {
Map.Entry<Integer, String> entry=iter.next();
System.out.println("键:"+entry.getKey());
System.out.println("值:"+entry.getValue());













集合中常用方法
1.向集合当中添加一个集合
list1.addAll(list2);但是要统一类型如: Collection或Map

2.判断集合是否为空
isEmpty()
判断集合是否为空的严谨方式
if(! list=null&&list.isEmpty())首先判定是否为空对象,排除空指针错误

3.清空数据
clear()清空数据,保留(list)对象,重置list.
如果想要去掉list则list=null;

4.返回元素(第一次出现)对应下标
indexOf()
而lastindexOf()返回元素最后一次出现的下标



5.removeAll(list)
从集合中删除另一个集合中所包含的元素,包括外层集合中与内层集合相同的元素也会被删除。






数组和集合相互转换
toArray( )
集合转换成数组
Object[ ] arr=list.toArray;


asList( )
数组转集合
List l=Array.asList( arr )



迭代器lterator(集合独有的)
如何遍历List集合?
1.方法一:通过for循环
2.方法二:通过迭代器


为什么要用迭代器
因为set和Map是没有下标的


1. 所有的集合接口和类都没有提供相应遍历方法,而由Iterator实现集合遍历
2.Collection接口的iterate()方法返回一个iterrator然后通过iterrator接口的两个方法可实现变量
2.1 boolean hasNext():判断是否存在另一个可访问的元素
2.2 Object next():返回要访问的下一个元素







List list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
// 遍历、循环、迭代其本质都差不多
for (int i = 0; i < list.size(); i++) {
// 现在包装类型可以直接转为基本数据类型,Integer是方便理解,可以去掉,换成int
int j = (Integer) list.get(i);
System.out.println(j);
}
// Iterator迭代器
// 1.获取迭代器
// Iterator是一个接口。而ArrayList有其实现类
Iterator iter = list.iterator();
// 2.通过通过循环迭代
// hasNext方法是判断是否存在下一个元素
while (iter.hasNext()) {
// next迭代
// Object强转成int
// Object--->interger-->int
int j = (int) iter.next();
System.out.println(j);




工具类
java集合框架将针对不同数据结构算法的实现都保存在工具类中。
Collections类定义了一系列用于操作集合的静态方法。


Collections主要方法
static void reverse(List list) 反转指定List集合中元素的排序
static void sort(List list) 根据元素的自然顺序,对指定集合进
行升序排序
static void swap(List list,int i,int j) 指定集合,指定位置处交换元素
static int binarySearch(List list,T key) 使用二分查找算法查找指定List集
合,已获得指定对象的索引
static Object max(Collection coll) 根据元素的自然顺序,返回集合的
最大元素
static Object min(Collection coll) 根据元素的自然顺序,返回集合的
最大元素
static boolean replaceAll(List list,Object oldject,Object newVal )
使用另一个值替换集合中出现的所有某一个值





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值