Collection集合概述:
collection集合是单列集合的顶层接口,他表示一组对象
collection需要他的具体实现接口才能实现(Set,list)
Collection集合有下面的几种常用方法:
boolean add(E e) 添加元素
boolean remove(Object o)从集合中移除指定元素
void clear 清空集合
boolean contains(Object o) 判断集合中是否存在指定元素
boolean isEmpty() 判断集合是否为空
int size() 返回集合长度
Collection集合的遍历方式
迭代器遍历
迭代器介绍:
使用Iterator<E>iterator 定义
迭代器是通过集合的iterator()方法得到的,他是依赖集合得到的
List集合的特点
List集合是有序集合,可以通过索引找到相应的元素
List集合是可重复集合
List集合的几种常用方法:
void add(int index,E element) 在集合的指定位置插入元素
E remove(int index) 删除指定索引处的元素,返回被删除的元素
E set(int index,E element) 在指定索引插入元素
E get(int index) 返回指定索引处的元素
并发修改异常
发生原因:在迭代器中修改集合对象
ConcurrentModificationException
解决方法:使用增强for循环遍历集合
增强for循环
for(元素数据类型 变量名:数组/集合对象){
循环体;
}
Set集合的特点
元素无序
没有索引,只能通过迭代器和增强for循环进行遍历
不能存储重复元素
哈希值
使用hashCode()方法获取hash值
哈希值的特点:
同一对象多次调用hashCod()方法获得的哈希值是相同的
默认情况下不同对象的哈希值不同但是可以通过方法重写来使不同对象具有相同的哈希值
*不同对象哈希值不同
哈希值相同可能是相同对象但是也可能是不同的对象
哈希表是数组与链表的结合
HashSet集合
HashSet集合的底层结构是哈希表
HashSet集合的存储与Set集合相同都不可以存储相同数据并且没有固定的存储顺序
HashSet没有索引只能通过迭代器和增强For遍历
HashSet通过哈希值来确定数据存储位置
HashSet保证元素唯一性的原理
1.首先根据对象的哈希值计算储存位置
如果当前位置没有元素就直接存入
如果有元素就执行第二步
2.只用当前元素与已经存在的元素比较哈希值
如果哈希值不同则进行存储
如果哈希值相同再进入第三步
3.使用equals()方法比较两个元素的内容是否相等
不相同则存入数据
相同则不存储数据
LinkedHashSet集合
LinkedHashSet集合的特点是链式存储数据有可以预知的迭代顺序
实现set接口所以具有set集合的特点
*TreeSet集合
TreeSet集合具有自动排序的特点,具体的排序方式取决于构造方法
TreeSet():根据其元素的自然排序进行排序
TreeSet(Comparator comparator):根据指定的比较器进行排序
没有带索引的方法,不能使用普通for循环遍历
Set类型的集合没有重复元素
构造器可以在实体类中重写CompareTo方法
也可以在创建对象的时候使用匿名内部类的方式声明
可变参数
可变参数的定义格式
修饰符 返回值类型 方法名(数据类型...变量名){}
Map集合
Map是一个接口不能直接实现需要借助对用的实现类来创建对象
interface Map<key,value>
Map集合的特点:
键值对的映射关系 键不能重复但是值可以重复
一个键对应一个值
元素存取无序
Map集合的基本功能
V put(K key,V value) 向Map集合中添加元素
V remove(Object key) 根据键值来删除指定元素
void clear() 移除所有元素
boolean containKey(Object key) 判断集合是否包含指定的键
boolean containValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 返回集合的长度
Map<String,String> map = new HashMap<String,String>();
//V put(K key,V value):添加元素
map.put("张无忌","赵敏");
map.put("郭靖","黄蓉");
map.put("杨过","小龙女");
//输出集合对象
System.out.println(map);
Map集合中重写了toString方法
Map集合的获取功能
V get(Object key) 根据键获取值
Set<K> keySet 获取所有键的集合
Collection<V> values() 获取所有值的集合
Set<Map.Entry<K,V>> entrySet() 获取所有键值对的集合
*Map集合遍历的方式一
获取所有键的集合,用KeySet()方法实现
遍历键的集合,获取没到每一个键,使用增强for实现
根据键去找值。使用get(Object key)方法实现
Map集合遍历的方式二
获取所有的键值对对象集合
使用Set<Map.Entry<K,V>> entrySet()方法获取所有的键值对集合
遍历键值对对象的集合,得到每一个键值对对象
//方式1:键找值
Set<String> keySet = hm.keySet();
for (String key : keySet) {
Student value = hm.get(key);
System.out.println(key + "," + value.getName() + "," + value.getAge());
}
System.out.println("--------");
//方式2:键值对对象找键和值
Set<Map.Entry<String, Student>> entrySet = hm.entrySet();
for (Map.Entry<String, Student> me : entrySet) {
String key = me.getKey();
Student value = me.getValue();
System.out.println(key + "," + value.getName() + "," + value.getAge());
Collections集合工具类
Collections是针对集合操作的工具类
Collections的常用方法:
public static void sort(List<T> list) 将指定的列表按升序排列
public static void reverse(List<?> list) 反转指定列表中元素的次序
public static void shuffle(List<?> list) 打乱指定列表的排序
File类
File类是文件和目录路径名的抽象表示
文件和目录可以通过File封装成对象
File类封装的并不是真正意义上的文件仅仅是一个路径名,它可以是存在的也可以是不存在的,可以在以后通过具体的操作把路径转化成具体的存在
File类常用的构造方法
File(String pathname) 通过给定的路径名字符串转换为抽象路径名来创建新的File实例
File(String parent,String child) 通过父路径名字字符串和子路径字符串创建
File(File parent,String child) 通过父路径抽象名和子路径字符串创建新的File实例
例:
File f1 = new File("E:\\itcast\\java.txt");
System.out.println(f1);
FIle类创建功能
public boolean createNewFile() 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
public boolean mkdir() 创建由此抽象路径名命名的目录
public boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
File类判断和获取功能
public boolean isDirectory() 测试此抽象路径名表示的File是否为目录
public boolean isFile() 测试此抽象路径名表示的File是否为文件
public boolean exists() 测试此抽象路径名表示的File是否存在
public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
public String getPath() 将此抽象路径名转换为路径名字符串
public String getName() 返回由此抽象路径名表示的文件或目录的名称
public String[] list() 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
public File[] listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组
|
|