集合框架JCF
JCF(Java Collections Framework)
集合 --- 把批量数据集中合并在一起进行操作
数组是集合的一种,而且是最简单最原始的一种
Java集合框架各接口的特点
集合框架包含3个部分:接口、实现类、算法
集合框架的接口:
1、Collection(集合)
a、List --- 存放线性有序元素(通过索引获取元素),元素可重复
b、Set --- 非线性无序(不能通过索引获取元素),元素不重复
2、Map --- 键缺值,一个元素包含两个对象;键对象不重复
List
List集合可以存储一列数据
1、数据内容可重复
2、以元素安插的次序来放置元素,不重新排列。
List常用实现方法
List接口
ArrayList 实现类
添加数据 add(Object).
// 添加数据 add(Object)
list.add(111);//索引为1
list.add("123");//索引为2
list.add(new UserBean());//索引为3
list.add(true);//索引为4
System.out.println(list.get(3));//得到索引为3的数据
删除元素
//删除元素
list.remove(3);//删除索引为3的数据
查看集合长度的方法size()
//查看集合长度的方法size()
System.out.println(list.size());//得到集合的长度
遍历方式 --- 三种方式
//length,length(),size()的区别
//遍历方式1 for循环遍历
for (int i = 0 ; i < list.size();i++){
System.out.println(list.get(i));
}
// 遍历方式2 集合迭代器进行遍历
Iterator iterator = list.iterator();
// hasNext() 判断迭代器中是否还有元素,没有返回false,有返回ture
// next() 获取迭代器中的元素
while (iterator.hasNext()){
Object o = iterator.next();
System.out.println(o);
}
// 遍历方式3 for-each 遍历
for (Object o : list){
System.out.println(o);
}
集合中的泛型
泛型可以规定集合中只能存放什么类型的元素,从而在使用集合元素时,开发者可以清晰的知道集合元素的类型,从而避免类型转换异常。
Liist<String> list = new ArrayList<String>();
//该集合中只能添加字符串对象
一个集合对象中定义了泛型后,如果插入的元素不匹配泛型定义的数据类型,那么无法通过编译。
list.add("abc"); //√
list.add(new UserBean()); //×
代码
/*
泛型:
可以用来规定存放数据的类型,
如果存放的数据其类型与泛型定义的类型不一致时,编译不通过
*/
List<String> strings = new ArrayList<>();
strings.add("你好");
strings.add("世界");
strings.add("tony");
String info = strings.get(0);
for (String s : strings){
System.out.println(s);
}
List集合的排序
在List接口中,提供了sort方法,可以实现List集合元素的排序。
List接口实现类的选择
ArrayList:底层采用数组实现,遍历元素、追加元素速度快,中间插入和删除元素速度慢,线程不安全。
ArrayList使用最广泛,集合元素增加或删除操作不频繁时使用。最适合查询。
Vector:与ArrayList类似,底层也用数组实现。但Vector是线程安全的,性能要低于ArrayList。
LinkdList:采用双向链表实现,元素空间不连续。遍历元素速度慢,中间插入
Set 接口
操作一列数据,而且数据无重复时,可以选择Set接口的实现类
Set接口实现类,利用元素的hashCode和equals方法,判断集合中元素时否重复。如果希望按元素的属性值去除重复数据,需要重写hashCode和equals方法。
Set 接口实现类常用方法:
add(Object); //向集合中添加元素
remove(Object); //将元素从集合移除
size(); //得到集合的长度
Set 接口实现类的选择
HashSet:按元素的Hash码排序,速度快。
TreeSet:1、按指定的排序规则对元素进行排序,速度慢。需要由Comparable比较器指定排序规则。当Comparable比较器的Compara方法,返回值为0时,表示元素重复。2、创建TreeSet对象时,在构造方法中传入Comparator比较器,重写compare方法。
## Map 接口
Map接口不是Collection的子接口。Map接口实现类中,一个元素包含两个对象:键对象(key)和值对象(value)。键对象是唯一的,不可重复。
Map接口中使用泛型,应该应该对键和值分别定义:
Map接口中,键的对象和值的对象可以是任何类的实例,并且键对象不可重复。
Map接口实现类的常用方法
put(key,value) | 向集合中添加元素 |
get(key) | 根据键对象找到值对象 |
keySet() | 得到键对象的集合 |
values() | 得到值对象的集合 |
remove(key) | 根据键对象移除整个元素 |
containsKey(key) | 判断键对象在集合中是否存在 |
Arrays
Java集合框架提供了Arrays类,用于完成对数组中数据的操作。
Arrays类包含用来操作数组(比如排序和搜索)的各种方法。
Arrays还提供了将元素转化为List集合的方法:
Collections
Java集合框架中提供了一个操作Set、List和Map等集合的工具类Collections,该工具类中提供了大量方法,用于对集合元素进行排序、查询、修改等操作。
Properties类
Properties是Map集合的实现类,是Hashtable的子类。该类用于处理属性文件。
Properties类可以将Map形式的键/值对数据存在文本文件中。能轻松的完成对属性文件数据的读取,以及将Properties对象中的数据保存在属性文件中。常用作软件的配置文件。
Properties常用方法
Properties一般用于操作属性文件(文件后缀为Properties),再后期用属性文件做项目或框架的配置。
属性文件中,数据都已键值对(键=值)形式保存。
通过Properties类加载(load)属性文件后,可以通过getProperties(k)获取值,也可通过setProperties(键,值),去给已存在的键修改值或者新增键值对。
通过store方法将内存中的Properties类数据保存到属性文件中。
load() | 加载属性文件中的数据 |
store() | 将Properties对象中现有的键值对保存进属性文件 |
getProperty() | 根据键对象,得到值对象。如果键对象不存在,返回null |
setProperty() | 向Properties对象中添加元素。如果键相同,则覆盖。 |