Array和ArrayList的区别?
1、Array可以包含基本类型也可以包含对象类型,ArrayList只能包含对象类型
但是需要注意的是:Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。
2、Array大小是固定的,ArrayList大小是动态变化的
ArrayList的空间是动态增长的,如果空间不够,它会创建一个空间比原空间大约0.5倍的新数组,然后将所有元素复制到新数组中,接着抛弃旧数组。而且,每次添加新的元素的时候都会检查内部数组的空间是否足够。(比较麻烦的地方)。
3、ArrayList提供了更多的方法和特性。比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
小tip:
ArrayList不适宜增加、删除,可使用LinkedList
换句话说,ArrayList的实现用的是数组,LinkedList是基于链表,ArrayList适合查找,LinkedList适合增删
ArrayList和Map的使用
// ArrayList定义
/*
* add(值) 增加
* remove(下标) 删除
* set(下标,值) 修改
* get(下标) 查看
* size() 获取长度
*/
ArrayList<String> aLists = new ArrayList<String>();
aLists.add("小明");
aLists.add("小红");
aLists.add("张三");
System.out.println(aLists.size());
aLists.remove(1);//按照索引删除
System.out.println(aLists.size());
aLists.add(0,"张三");
System.out.println(aLists.get(2));
aLists.set(1, "小谷");
System.out.println(aLists.get(1));
for(String a:aLists) {
System.out.println(a);
}
System.out.println("=========================");
for(int i=0;i<aLists.size();i++) {
System.out.println(aLists.get(i));
}
System.out.println("===========集合转数组==============");
// 集合转数组
String[] strArr = aLists.toArray(new String[0]);
for(String s:strArr) {
System.out.println(s);
}
// 数组转集合
List<String> asListTwo = Arrays.asList(strArr);
/*
* Map使用
* put(k,v)增加元素
* remove(k) 删除元素
* replace(k,v) 修改元素
* get(k) 查看元素
* size() 获取长度
*/
Map<String,String> students = new HashMap<String,String>();
students.put("name", "张三");
students.put("age", "29");
students.put("job", "tester");
//students.remove("age");删除年龄
students.replace("age", "30");
System.out.println(students.get("age"));
System.out.println("==================第一种遍历方式Collection==========");
// 第一种遍历方式,无索引不能用for循环
Collection c = students.values();
Iterator it = c.iterator();//将COLLECTION对象放入迭代器
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println("===========第二种遍历,通过key、value=======");
// 第二种遍历,通过key、value
Collection c1 = students.entrySet();//将所有的键值对作为一个collection对象返回
Iterator it1 = c1.iterator();
while(it1.hasNext()) {
Entry entry = (Entry)it1.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
System.out.println("======第三种通过key进行遍历");
// 第三种遍历方式,通过key
Collection c2 = students.keySet();//将所有的key作为collection的对象
Iterator it2 = c2.iterator();
while(it2.hasNext()) {
String key = (String)it2.next();
System.out.println(key+":"+students.get(key));
}