`
逆风的香1314
  • 浏览: 1453817 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

老紫竹JAVA提高教程(7)-认识List列表之ArrayList

阅读更多

 

原文地址:http://www.java2000.net/p11888

 

ArrayList是List里面使用率最高的。

  1. package collection.lession7;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.Collection;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. /**
  8.  * 老紫竹JAVA提高教程(7)-认识List列表之ArrayList<br>
  9.  * 
  10.  * @author 老紫竹 JAVA世纪网(java2000.net)
  11.  * 
  12.  */
  13. public class Lession7 {
  14.   public static void main(String[] args) {
  15.     testNormal();
  16.     testSpecial();
  17.     // 一个最常见的错误
  18.     testForProblem();
  19.   }
  20.   public static void testNormal() {
  21.     // -------------------------------------------------------
  22.     // 声明一个列表
  23.     // 允许放入任何数据
  24.     // -------------------------------------------------------
  25.     ArrayList list = new ArrayList();
  26.     // 放入整数
  27.     // 当然你用 new Integer(1)也可以
  28.     list.add(1);
  29.     // 放入字符串
  30.     list.add("abc");
  31.     // 放入浮点数
  32.     list.add(new Float(1.11));
  33.     // add会将数据保存到列表的尾部
  34.     showList(list); // 1, abc, 1.11]
  35.     // 下面我们在列表的头部增加数据
  36.     list.add(02);
  37.     list.add(0"bcd");
  38.     list.add(0new Double(2.34));
  39.     // 列表可以指定插入的位置
  40.     // 0 是头部第一个位置,所以数据都逐个放到最前面了
  41.     showList(list); // [2.34, bcd, 2, 1, abc, 1.11]
  42.     // 下面我们插入到我们希望的任何位置
  43.     // 当然不能越界,(0 到 list.size()-1)范围内才可以
  44.     list.add(13);
  45.     list.add(4"xyz");
  46.     // 数据被放到了正确的位置
  47.     showList(list); // [2.34, 3, bcd, 2, xyz, 1, abc, 1.11]
  48.     // -------------------------------------------------------
  49.     // 我们有了数据,我们来测试读取数据
  50.     // -------------------------------------------------------
  51.     // 我们可以通过指定索引的位置,来拿到我们希望的数据
  52.     System.out.println(list.get(0)); // 2.34
  53.     System.out.println(list.get(4)); // xyz
  54.     // -------------------------------------------------------
  55.     // 测试是否存在某个数据
  56.     // -------------------------------------------------------
  57.     System.out.println(list.contains("xyz")); // true
  58.     // 测试是否包含一组数据
  59.     Collection c = new ArrayList();
  60.     c.add(1);
  61.     c.add(2);
  62.     System.out.println(list.containsAll(c)); // true
  63.     c.add(3);
  64.     c.add(4);
  65.     // containsAll_1234=false
  66.     System.out.println(list.containsAll(c)); // false
  67.     // -------------------------------------------------------
  68.     // 查找某个数据所在的索引位置
  69.     // 如果不存在,返回-1
  70.     // -------------------------------------------------------
  71.     System.out.println(list.indexOf(3)); // 1
  72.     System.out.println(list.indexOf("xyz")); // 4
  73.     System.out.println(list.indexOf("abcd")); // -1
  74.     // -------------------------------------------------------
  75.     // 测试删除数据
  76.     // 请注意,
  77.     // 如果你使用整数(int)数字,则默认调用的是remove(int index);
  78.     // 如果你用 long,则会调用 remove(Object obj);
  79.     // 所以如果你要删除整数,请使用 remove(new Integer(int));
  80.     // -------------------------------------------------------
  81.     // 删除索引为1的数据
  82.     list.remove(1);
  83.     // 索引为1的数据被干掉了
  84.     showList(list); // [2.34, bcd, 2, xyz, 1, abc, 1.11]
  85.     // 删除数字1 和字符串 abc
  86.     list.remove(new Integer(1));
  87.     list.remove("xyz");
  88.     showList(list); // [2.34, bcd, 2, abc, 1.11]
  89.     // -------------------------------------------------------
  90.     // 迭代器的使用
  91.     // -------------------------------------------------------
  92.     Iterator it = list.iterator();
  93.     while (it.hasNext()) {
  94.       System.out.print(it.next() + " "); // 2.34 bcd 2 abc 1.11
  95.     }
  96.     System.out.println();
  97.     // -------------------------------------------------------
  98.     // 转化为数组
  99.     // -------------------------------------------------------
  100.     Object[] objs = list.toArray();
  101.     for (Object obj : objs) {
  102.       System.out.print(obj + " "); // 2.34 bcd 2 abc 1.11
  103.     }
  104.     System.out.println();
  105.   }
  106.   public static void testSpecial() {
  107.     // -------------------------------------------------------
  108.     // 测试重复和null
  109.     // -------------------------------------------------------
  110.     //
  111.     List<Integer> list = new ArrayList<Integer>();
  112.     list.add(123);
  113.     list.add(456);
  114.     list.add(123);
  115.     list.add(456);
  116.     // 数据允许重复
  117.     showList(list); // [123, 456, 123, 456]
  118.     list.add(null);
  119.     list.add(789);
  120.     list.add(null);
  121.     list.add(999);
  122.     // 允许放入多个null
  123.     showList(list); // [123, 456, 123, 456, null, 789, null, 999]
  124.     // -------------------------------------------------------
  125.     // 测试一下查找最后一次出现的位置
  126.     // -------------------------------------------------------
  127.     System.out.println(list.indexOf(123)); // 0
  128.     System.out.println(list.lastIndexOf(123)); // 2
  129.     // -------------------------------------------------------
  130.     // 转化为数组
  131.     // 记得要转化为Inerger.
  132.     // -------------------------------------------------------
  133.     Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
  134.     // 注意数据里面有null,所以循环变量不要用int 要用Integer
  135.     for (Integer num : nums) {
  136.       System.out.print(num + " "); // 123 456 123 456 null 789 null 999
  137.     }
  138.     System.out.println();
  139.   }
  140.   public static void testForProblem() {
  141.     // 一些朋友在向循环里向列表增加对象的时候
  142.     // 经常忘记初始化,造成最终加入的都是同一个对象
  143.     List<MyObject> list = new ArrayList<MyObject>();
  144.     MyObject obj = new MyObject();
  145.     for (int i = 1; i <= 5; i++) {
  146.       obj.setName("Name" + i);
  147.       list.add(obj);
  148.     }
  149.     // 里面的数据都是最后一个
  150.     showList(list); // [Name5, Name5, Name5, Name5, Name5]
  151.     // 正确的做法
  152.     List<MyObject> list2 = new ArrayList<MyObject>();
  153.     MyObject obj2 = null;
  154.     for (int i = 1; i <= 5; i++) {
  155.       obj2 = new MyObject();
  156.       obj2.setName("Name" + i);
  157.       list2.add(obj2);
  158.     }
  159.     // 里面的数据都是最后一个
  160.     showList(list2); // [Name1, Name2, Name3, Name4, Name5]
  161.   }
  162.   /**
  163.    * 显示List里面的数据。
  164.    * 
  165.    * @param list
  166.    */
  167.   private static void showList(List list) {
  168.     System.out.println(Arrays.toString(list.toArray()));
  169.   }
  170. }
  171. class MyObject {
  172.   private String name;
  173.   public String getName() {
  174.     return name;
  175.   }
  176.   public void setName(String name) {
  177.     this.name = name;
  178.   }
  179.   /**
  180.    * 重写toString方法,输出name
  181.    */
  182.   public String toString() {
  183.     return name;
  184.   }
  185. }
输出结果
[1, abc, 1.11]
[2.34, bcd, 2, 1, abc, 1.11]
[2.34, 3, bcd, 2, xyz, 1, abc, 1.11]
2.34
xyz
true
true
false
1
4
-1
[2.34, bcd, 2, xyz, 1, abc, 1.11]
[2.34, bcd, 2, abc, 1.11]
2.34 bcd 2 abc 1.11
2.34 bcd 2 abc 1.11
[123, 456, 123, 456]
[123, 456, 123, 456, null, 789, null, 999]
0
2
123 456 123 456 null 789 null 999
[Name5, Name5, Name5, Name5, Name5]
[Name1, Name2, Name3, Name4, Name5]
分享到:
评论

相关推荐

    java基础--list(ArrayList、LinkedList、匿名类).docx

    【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...

    java提高篇(二一)-----ArrayList.pdf

    "java提高篇(二一)-----ArrayList.pdf" ArrayList 是一个实现了 List 接口的动态数组,具有以下特点: 1. 动态数组:ArrayList 的大小是可变的,可以根据需要自动增长。 2. 实现了所有可选列表操作:ArrayList ...

    java基础教程----精华版

    这个"java基础教程----精华版"显然是一份精心整理的资料,旨在帮助初学者快速掌握Java编程的基础知识。下面将详细介绍Java语言的核心概念和关键知识点。 1. **Java语法基础**: - **变量**:在Java中,变量是存储...

    跟我学Java-day14-ArrayList集合.pdf

    day14-ArrayList集合 1.ArrayList 1.1ArrayList类概述【理解】 什么是集合 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点 底层是数组实现的,长度可以变化 泛型的使用 ...

    Java自学视频教程-JavaSE基础-常用API-01、String、ArrayList课程安排.mp4

    Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式...本视频教程帮助你从新手小白到成为精通JAVA的高手,从软件的安装,功能的介绍和使用,实战演习讲解等各大维度进行详细的教学.

    javalist数据结构-Java数据结构-------List.pdf

    Java中的List接口是集合框架的重要组成部分,它定义了一组有序的元素序列,允许有重复的元素。ArrayList、Vector和LinkedList都是List接口的实现类,它们各自具有不同的特性和使用场景。 1. ArrayList: ArrayList...

    Java Methods-java.util.ArrayList.ppt

    Java.util.ArrayList 是 Java 语言中一个非常重要的类,它实现了一个可以动态调整大小的数组列表。下面我们将详细讨论 ArrayList 类的构造方法、方法、特点和使用场景。 一、ArrayList 类的构造方法 ArrayList 类...

    【IT十八掌徐培成】Java基础第10天-03.List-集合框架-ArrayList.zip

    本课程“【IT十八掌徐培成】Java基础第10天-03.List-集合框架-ArrayList”深入讲解了Java中的ArrayList类,这是集合框架中的一个重要组成部分,特别适用于对元素有序且可变大小的需求。 ArrayList是Java.util包下的...

    46-Java知识点 手写ArrayList1

    Java 知识点 手写 ArrayList Java 中最常用的类是 ArrayList,它的实现原理和方法非常重要。在面试中,经常要求手写一个 ArrayList,以考察应聘者对 ArrayList 的熟悉程度。本文将详细介绍如何手写一个 ArrayList,...

    java8源码-csn-list:ArrayList、LinkedList、Vector、Stack源码分析

    java8 源码 List相关实现类的源码解析(JDK1.8) 2018.9.22- List的架构图 ArrayList 继承关系: ArrayList -&gt; AbstractList 实现 List接口 ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的...

    Java 集合框架(2-9)-Collection - ArrayList 源码解析.pdf

    ArrayList是Java集合框架中的一个重要组件,它属于List接口的实现类,提供了一种动态数组的逻辑视图。ArrayList以高效、灵活的方式存储和操作对象序列,是开发过程中常用的容器之一。本文将深入解析ArrayList的内部...

    Java自学视频教程-JavaSE基础-常用API-07、ArrayList案例:遍历删除、存对象、元素搜索.mp4

    Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式...本视频教程帮助你从新手小白到成为精通JAVA的高手,从软件的安装,功能的介绍和使用,实战演习讲解等各大维度进行详细的教学.

    Java自学视频教程-JavaSE基础-常用API-06、集合概述、ArrayList的使用.mp4

    Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式...本视频教程帮助你从新手小白到成为精通JAVA的高手,从软件的安装,功能的介绍和使用,实战演习讲解等各大维度进行详细的教学.

    超市会员管理系统.rar

    所有会员(卡)--集合:List ArrayList&lt;Member&gt; 程序整体流程搭建的方法 循环 分支 验证会员是否存在的方法 集合的遍历,集合元素的查找 系统随机生成会员卡号的方法 Random类 开卡 输入会员信息...

    Java-Java集合体系-List-Set

    Java集合体系是Java编程中非常核心的部分,涵盖了用于存储和操作数据的各种数据结构。在Java中,集合主要分为三大接口:List、Set和Map。这些接口各有特点,适用于不同的应用场景。 一、List接口 List接口是单列...

    java集合类详解(set list ArrayList等java集合类详述)

    Java 集合类详解 Java 集合类是 Java 语言中的一种基本数据结构,用于存储和操作大量数据。集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、...

Global site tag (gtag.js) - Google Analytics