一.数组
1.概念:数组Array,标志是[ ] 用于存储多个相同类型数据的集合,想要获取数组中的元素值,可通过下标来获取
数组下标从0开始,下标的最大值是数组的长度减一
2.创建数组:数组的创建分为动态初始化和静态初始化
1)动态初始化:int []a =new int[5]
2) 静态初始化:int []b = new int[]{1,2,3,4,5};
int []c = {1,2,3,4,5};
3.数组创建过程:程序创建数组int[] a = new int[5];时发生了什么?
1)在内存中开辟连续的空间,用来存放数据,长度是5
2)给数组完成初始化过程,给每个元素赋予默认值,int类型默认值是0
3)数组完成初始化会分配一个唯一的地址值
4)把唯一的地址值交给引用类型的变量a去保存
二.数组工具类
1.Arrays.toString(把数组里的数据用逗号连接成一个字符串)
2.Arrays.sort(对数组进行排序,对基本类型数组使用的是优化后的快速排序算法,效率高
对引用类型数组,使用的是优化后的合并排序算法)
3.Arrays.copyOf(把数组赋值成指定长度的新数组
新数组的长度大于原数组,相当于复制,并增加位置
新数组的长度小于原数组,相当于截取一部分数据)
三.集合
1.Java中提供了一些集合类,这些集合类又称之为容器
提到容器会想到数组,集合与数组最主要的不同是 数组的长度是固定的,集合的长度是可变的,
数组的访问方式比较单一,插入删除等操作比较繁琐,而集合的访问方式比较灵活
2.常用的集合类
List集合,Set集合,Map集合,其中List与Set集合继承了Collection接口,各个接口还提供了不同的实现类
3.集合的概念:
用来存放对象的数据结构,而且长度可变,可以存放不同类型的对象,并且提供了一组操作成批对象的方法
Collection接口提供了添加元素/删除元素/管理元素的父类接口公共方法,由于List与Set接口都继承了Collection接口
因此那些方法对于List集合和Set集合是通用的
4.集合的继承结
集合的顶级根接口是Collection--添加元素/删除元素/管理元素的父接口公共方法
子接口1 List--数据有下标,有序,可重复
实现类1 ArrayList
实现类2 LinkedList
子接口2 Set--数据无下标,无序,不可重复【常用于数据去重】
实现类1 HashSet
实现类2 TreeSet--红黑树
其他的集合:Map 接口--键值对【Entry<K,V>】的方式存数据
实现类1:HashMap
实现类2:TreeMap
5.Collection接口的常用方法
6.泛型
概念:<?> 他就是泛型,通常用来和集合对象一起使用
他是程序的增强器,目前主流的开发模式
作用:
1)约束集合中元素的类型,编译器可以在编译期根据泛型约束提供一定的安全检查,代码的通用性更强
2)可以提升代码的可读性,编译后会被删除,不会出现在最终的源码中,不会影响JVM运行的性能
7.迭代的步骤:
1)获取迭代器
Iterator<E> iterator() 返回在此 collection 的元素上进行迭代的迭代器
2)循环迭代集合中的所有元素
boolean hasNext() 如果仍有元素可以迭代,则返回 true。
3)获取本轮循环迭代到的元素
E next() 返回迭代的下一个元素
8.迭代器Iterator在Collection接口中的使用
1)配合while()循环实现遍历输出:
1 ArrayList list = new ArrayList();
2 //此处省略list的具体赋值过程
3 Iterator it = list.iterator();
4 while(it.hasNext()){
5 System.out.println(it.next());
6 }
2)配合for()循环实现遍历输出:
1 ArrayList list = new ArrayList();
2 //此处省略list的赋值过程
3 for(Iterator it = list.iterator();it.hasNext();){
4 System.out.println(it.next());
5 }
9.迭代器Iterator在Map接口中的使用:
1)与while()的结合:
1 HashMap<K,V> myMap = new HashMap<K,V>();
2 //省略myMap的的赋值过程
3 Iterator<Map.Entry<K,V> it=myMap.entrySet().iterator();
4 while(it.hasNext()){
5 System.out.println(it.next());
6 }
7
2)与for()的结合:
1 HashMap<K,V> myMap=new HashMap<K,V>();
2 //省略myMap的赋值过程
3 for(Iterator<Map.Entry<K,V>> it=myMap.entrySet().iterator();it.hasNext();){
4 System.out.println(it.next());
5 }