数组
- 创建数组的三种方式
int[] array1 = new int[5];
int[] array2 = new int[]{1,2,3,4,5};
int[] array3 = {1,2,3,4,5}
- 数组的属性
- 一旦创建好,数组的长度就不再改变
Arrays 都是静态方法 是数组的工具类
位于 : java.util
如果数组引用为空,则抛出NullPointerException
- 常用方法
sort(int a) //对数组进行排序
fill(int[] a,int val) //将制动内容填充到数组中
equals(int[] a,int[] b) //判断两个数组是否相等
toString(int[] a) //输出数组信息
deepToString(int[] a) //输出多维数组信息
deepEquals(int[] a,int[] b) //判断多维数组是否相等
容器类
graph TD
a[java.lang.object]-->b[Map接口]
b-->c[HashMap]
b-->d[TreeMap]
a-->e[Collection接口]
e-->f[Set子接口]
e-->g[List子接口]
f-->h[HashSet]
f-->i[TreeSet]
g-->j[ArrayList]
g-->k[LinkedList]
和集合对比,主要体现在效率,类型,保存基本类型的能力
-
集合是简单的线性排列,所以速度很快
- 但是不灵活,一旦创建大小就固定
-
集合可以直接保存,基本数据类型
-
容器类保存的是object类型,基本数据类型需要转换成包装类才可以保存(由自动装拆箱完成)
-
ArrayList 底层用数组实现,称为动态数组,不是线程同步的,线程不安全 Object类型
-
Vector 自动增长的对象数组,线程安全,大体上与arrayslist类似 Object类型
ArrayList a = new ArrayList():
a.add("ss");
System.out.println(a.get(0));
get(int index) //获取指定索引处的值
-
HashSet 只能通过迭代器获取值
-
调用散列函数,储存方式无序不重复,底层用HashMap实现
- 散列函数就是通过计算得到哈希值,把哈希值作为储存的位置
-
优点:速度快
-
TreeSet 只能通过迭代器获取值
-
有序不重复,底层用TreeMap实现
-
Map接口 跟c# python 中的字典类似
Map d = new HashMap();
d.put("a",2); //增加键值对
System.out.println(d.get("a")//通过键获取值);
HashMap 值是无序的
-
底层由数组构建
-
影响性能的主要参数是: 底层容量 加载因子
- 底层容量 底层数组的大小
- 加载因子 当满足什么条件的时候自动扩容
-
遍历
-
第一种转换为entrySet;//效率高O(1)
Map d = new HashMap();
d.put("a",2);
d.put(1,333);
Iterator e = d.entrySet().iterator(); //把Map类型转换为entry集合的迭代器
while (e.hasNext()){
Map.Entry a = (Map.Entry) e.next(); //转换为Map类型
a.getKey(); //获取键
a.getValue(); //获取值
}
- 第二种转换为keySet;//效率低O(2)
Map d = new HashMap();
d.put("a",2);
d.put(1,333);
Iterator a = d.keySet().iterator(); //把键集合转换为迭代器
while (a.hasNext()){
Object c = a.next(); //获取键
Object e = d.get(c); //通过获得的键获取值
}
TreeMap 基于红黑树实现,值是有序的,能够保持固定的顺序
Conllections
-
是服务于Conllection的工具类
-
关系类似于 Arrays 对 数组
-
Java对集合的遍历
-
Iterator 遍历迭代,最常见的迭代方式
-
ListIterator : Iterator 的子接口,专门用于迭代List中的元素
-
Enumeration 一个旧的接口类似于 Iterator
-
foreach 可以便利数组和集合 JDK 5 之后增加的
Iterator常用方法
Iterator<T> iterator() //返回T类型的迭代器对象
boolean hasNext(); //是否还可以进行迭代
E next() //返回E类型的下一个元素
void remove() //从迭代器的对象中移除返回的最后一个元素
ListIterator常用方法
void add(E e) //将指定的元素插入列表
boolean hasNext() //是否还可以进行迭代
E next() //返回迭代的下一个元素
boolean hasPrevious() //如果逆向迭代,返回是否前面还有元素
int nextIndex() //返回下一个元素的索引值
E previous() //返回前一个元素
void set(E e) //用指定元素替换正向,或逆向的最后一个元素