ArrayList类

来源:互联网 发布:算法导论第三版epub 编辑:程序博客网 时间:2024/05/12 04:58
package 集合类.list类;/** * System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。 一.优点 1。支持自动改变大小的功能 2。可以灵活的插入元素 3。可以灵活的删除元素  * @author jjj *  注意,里面的元素是可以重复的,如果元素是new出来的一些对象的话,实际上元素只是对象的引用 */import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Iterator;import java.util.List;public class ArrayList类 {/** * 老紫竹JAVA提高教程(7)-认识List列表之ArrayList<br> *  * @author 老紫竹 JAVA世纪网(java2000.net) *  */public static void main(String[] args) {testNormal();testSpecial();// 一个最常见的错误testForProblem();}public static void testNormal() {// -------------------------------------------------------// 声明一个列表// 允许放入任何数据// -------------------------------------------------------ArrayList list = new ArrayList();// 放入整数// 当然你用 new Integer(1)也可以list.add(1);// 放入字符串list.add("abc");// 放入浮点数list.add(new Float(1.11));// add会将数据保存到列表的尾部showList(list); // 1, abc, 1.11]// 下面我们在列表的头部增加数据list.add(0, 2);list.add(0, "bcd");list.add(0, new Double(2.34));// 列表可以指定插入的位置// 0 是头部第一个位置,所以数据都逐个放到最前面了showList(list); // [2.34, bcd, 2, 1, abc, 1.11]// 下面我们插入到我们希望的任何位置// 当然不能越界,(0 到 list.size()-1)范围内才可以list.add(1, 3);list.add(4, "xyz");// 数据被放到了正确的位置showList(list); // [2.34, 3, bcd, 2, xyz, 1, abc, 1.11]// -------------------------------------------------------// 我们有了数据,我们来测试读取数据// -------------------------------------------------------// 我们可以通过指定索引的位置,来拿到我们希望的数据System.out.println(list.get(0)); // 2.34System.out.println(list.get(4)); // xyz// -------------------------------------------------------// 测试是否存在某个数据// -------------------------------------------------------System.out.println(list.contains("xyz")); // true// 测试是否包含一组数据Collection c = new ArrayList();c.add(1);c.add(2);System.out.println(list.containsAll(c)); // truec.add(3);c.add(4);// containsAll_1234=falseSystem.out.println(list.containsAll(c)); // false// -------------------------------------------------------// 查找某个数据所在的索引位置// 如果不存在,返回-1// -------------------------------------------------------System.out.println(list.indexOf(3)); // 1System.out.println(list.indexOf("xyz")); // 4System.out.println(list.indexOf("abcd")); // -1// -------------------------------------------------------// 测试删除数据// 请注意,// 如果你使用整数(int)数字,则默认调用的是remove(int index);// 如果你用 long,则会调用 remove(Object obj);// 所以如果你要删除整数,请使用 remove(new Integer(int));// -------------------------------------------------------// 删除索引为1的数据list.remove(1);// 索引为1的数据被干掉了showList(list); // [2.34, bcd, 2, xyz, 1, abc, 1.11]// 删除数字1 和字符串 abclist.remove(new Integer(1));list.remove("xyz");showList(list); // [2.34, bcd, 2, abc, 1.11]// -------------------------------------------------------// 迭代器的使用// -------------------------------------------------------Iterator it = list.iterator();while (it.hasNext()) {System.out.print(it.next() + " "); // 2.34 bcd 2 abc 1.11}System.out.println();// -------------------------------------------------------// 转化为数组// -------------------------------------------------------Object[] objs = list.toArray();for (Object obj : objs) {System.out.print(obj + " "); // 2.34 bcd 2 abc 1.11}System.out.println();}public static void testSpecial() {// -------------------------------------------------------// 测试重复和null// -------------------------------------------------------//List<Integer> list = new ArrayList<Integer>();list.add(123);list.add(456);list.add(123);list.add(456);// 数据允许重复showList(list); // [123, 456, 123, 456]list.add(null);list.add(789);list.add(null);list.add(999);// 允许放入多个nullshowList(list); // [123, 456, 123, 456, null, 789, null, 999]// -------------------------------------------------------// 测试一下查找最后一次出现的位置// -------------------------------------------------------System.out.println(list.indexOf(123)); // 0System.out.println(list.lastIndexOf(123)); // 2// -------------------------------------------------------// 转化为数组// 记得要转化为Inerger.// -------------------------------------------------------Integer[] nums = (Integer[]) list.toArray(new Integer[0]);// 注意数据里面有null,所以循环变量不要用int 要用Integerfor (Integer num : nums) {System.out.print(num + " "); // 123 456 123 456 null 789 null 999}System.out.println();}public static void testForProblem() {// 一些朋友在向循环里向列表增加对象的时候// 经常忘记初始化,造成最终加入的都是同一个对象List<MyObject> list = new ArrayList<MyObject>();MyObject obj = new MyObject();for (int i = 1; i <= 5; i++) {obj.setName("Name" + i);list.add(obj);}// 里面的数据都是最后一个showList(list); // [Name5, Name5, Name5, Name5, Name5]// 正确的做法List<MyObject> list2 = new ArrayList<MyObject>();MyObject obj2 = null;for (int i = 1; i <= 5; i++) {obj2 = new MyObject();obj2.setName("Name" + i);list2.add(obj2);}// 里面的数据都是最后一个showList(list2); // [Name1, Name2, Name3, Name4, Name5]}/** * 显示List里面的数据。 *  * @param list */private static void showList(List list) {System.out.println(Arrays.toString(list.toArray()));}}class MyObject {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}/** * 重写toString方法,输出name */public String toString() {return name;}}
原创粉丝点击