5、数组和集合--Collection、Map
一、数组:同一个类型数据的集合,其实他也是一个容器
1、数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些数据
2、数组的定义:
在Java中常见:
格式1: 类型 [] 数组名 = new 类型[数组长度或数组元素的个数]; 例如: int [] dada = new int[3];
格式2: 类型 [] 数组名 = new 类型[]{值1,值2,值3……}; 例如: int [] data = new int{1,2,3,……};
和上边的意思一模一样,更符合用用过C语言编程的程序员的编程习惯:
格式1: 类型 数组名 [] = new 类型[数组长度或数组元素的个数]; 例如: int dada [] = new int[3];
格式2: 类型 数组名 [] = new 类型[]{值1,值2,值3……}; 例如: int data [] = new int{1,2,3,……};
3、数组的遍历方式:通过属性length获取该数组的元素个数。
使用方式: 数组名称.length
例如:
public static void main(String[] args) { int data[] = new int[3]; for(int i=0;i<data.length;i++) data[i]=i; for(int i=0;i<data.length;i++) System.out.println("数组data的第"+i+"个数字为"+data[i]); } 输出结果为: 数组data的第0个数字为0 数组data的第1个数字为1 数组data的第2个数字为2
二、集合-Collection: 分为List、Set两种。
1、List:元素是有序的,元素可以重复,因为该集合体有索引
a)、ArrayList:底层数据结构使用的数据结构。特点是:查询速度快,增删速度慢,线程不同步。
b)、LinkedList:底层使用的链表数据结构。特点查询速度慢,增删速度快,线程不同步。
c)、Vector:底层数据结构,线程同步。
2、Set:元素是无序的,元素不可以重复。
a)、HashSet:d
b)、TreeSet:可以set集合中的元素进行排序,线程不同步。
三、集合-Map
1、Map:存储键值对
a)、HashMap:底层是哈希表数据结构,可以存入null作为键或值,线程不同步
b)、HashTable:底层是哈希表数据结构,不可以存入null作为键或值,线程同步。
c)、TreeMap:底层是二叉树结构,线程不同步。
四、泛型:用于解决安全问题,是一个类型安全机制。
泛型在集合框架中很常见,只要见到<>就要定义泛型
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可
五、遍历:即查询集合中的所有元素。
1、利用size()和get()方法获取。因为List是有序的,所以可以用这种分方法来遍历。
@Test public void Test(){ List<String> list = new ArrayList<String>(); list.add("DDDDD"); list.add("EEEEE"); list.add("FFFFF"); print(list); //因为list有顺序,利用size()和get()方法获取 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } }
2、利用Iterator迭代器进行遍历
@Test public void test(){ List list = new LinkedList(); list.add("123"); list.add("456"); Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }
3、增强for循环
@Test public void test(){ List list = new LinkedList(); list.add("123"); list.add("456"); for(List a : list) System.out.println(a); }
4、对于Map的遍历方式
@Test public void test() { Map<String,String> map = new TreeMap<String, String>(); map.put("Jerry", "10000"); map.put("shellway", "20000"); map.put("Kizi", "30000"); print(map.entrySet()); //Map的第一种遍历方式:先获得key的集合,再获得值value Set<String> sett = map.keySet(); for (String s : sett) { System.out.println(s+":"+map.get(s)); } //Map的第二种遍历方式:获得键值对 for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey()+" : "+entry.getValue()); } }
五、集合和数组的区别:
1、数组长度是不变的,集合长度是可变的。
2、数组存储相同的类型对象,集合可以存储不同类型的对象。