集合
集合类被称为容器类
数量不确定 具有映射关系的数据 只能存储对象(保存对象引用变量)
位于java.util
java5之前丢掉所有数据类型保存为object 5以后可以保存具体数据类型
不能放基本的数据类型但是支持数据自动装箱
数组可以保存基本数据类型和对象
分类
set 无序 不可重复
list 有序 可重复
map 具有映射关系 key-value key不可重复 value可以重复
queue 一种队列集合的实现 java5之后
set list queue是collection接口子类 map是Map的子类
Iterator主要用来遍历(迭代访问)Collection集合中的元素 其对象也被称为迭代器
Iterator接口隐藏了Collection实现类的底层细节 是Collection接口的父接口
Java8 新增了foreach(Consumer action)方法
参数类型是一个函数式接口Collection可以直接调用
set
1hashset
a元素无需 b不同步 多线程操作需写代码 c集合中值可以为null
通过hashcode()与equels判断是否重复 hashcode()决定元素在hashset中的位置
hashcode()值相同 equels()不同同一个位置放置多个元素 性能降低
hashcode()调用后返回对象的hash值
String Str = new String(“www.csdn.com”);
System.out.println(“字符串的哈希码为 :” + Str.hashCode() );
hash值的int算法为
s[0]*31^(n-1) + s[1]*31 ^(n-2) + … + s[n-1] (n为字符串的长度)
2Linkedhashset
使用链表维持元素顺序的hashset 不允许元素重复
hashset的子类
3Treeset
是Sortedset接口的实现类
自然排序
确保元素处于排序状态 元素按照大小排序并非插入顺序 升序排列
继承Comparator接口的compareTo(object obj)obj1.compareTo(obj2) 等于0 相等 正数大于 负数小于
char string等数据类型对比unicode boolea true对应的包装类实例大于 false对应的包装类实例
只能存入同一类型数据 根据红黑树结构新添加的元素与之前的元素比较大小 否则ClassCaseException
list
可以按索引访问元素 按添加顺序分配索引
ArrayList Vector 基于数组实现的 封装动态Object[]数组 不设置长度 默认长度为10
遍历List集合
public class Test {
public static void main(String[] args) {
// 循环遍历List的4中方法
List<String> list = new ArrayList<>();
list.add("l");
list.add("i");
list.add("s");
list.add("t");
// 1. 普通遍历方式
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 2.增强的for循环
for (String str : list) {
System.out.println(str);
}
// 3. 使用Iterator迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String str = (String) it.next();
System.out.println(str);
}
// 4. java8 Lambda方式
// list.forEach(System.out::println);//和下面的写法等价
strList.forEach(str -> {
System.out.println(str);
});
}
}
map
hashmap 线程安全 允许使用null作为key value
hashtable 线程安全 不允许使用null作为key value