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.34
System.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)); // true
c.add(3);
c.add(4);
// containsAll_1234=false
System.out.println(list.containsAll(c)); // false // -------------------------------------------------------
// 查找某个数据所在的索引位置
// 如果不存在,返回-1
// -------------------------------------------------------
System.out.println(list.indexOf(3)); // 1
System.out.println(list.indexOf("xyz")); // 4
System.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 和字符串 abc
list.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);
// 允许放入多个null
showList(list); // [123, 456, 123, 456, null, 789, null, 999] // -------------------------------------------------------
// 测试一下查找最后一次出现的位置
// -------------------------------------------------------
System.out.println(list.indexOf(123)); // 0
System.out.println(list.lastIndexOf(123)); // 2 // -------------------------------------------------------
// 转化为数组
// 记得要转化为Inerger.
// -------------------------------------------------------
Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
// 注意数据里面有null,所以循环变量不要用int 要用Integer
for (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;
}
}

Java-ArrayList的更多相关文章

  1. Java ArrayList、Vector和LinkedList等的差别与用法(转)

    Java ArrayList.Vector和LinkedList等的差别与用法(转) ArrayList 和Vector是采取数组体式格式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,都 ...

  2. 浅析 java ArrayList

    浅析 java ArrayList 简介 容器是java提供的一些列的数据结构,也可以叫语法糖.容器就是用来装在其他类型数据的数据结构. ArrayList是数组列表所以他继承了数组的优缺点.同时他也 ...

  3. Java ArrayList中对象的排序 (Comparable VS Comparator)

    我们通常使用Collections.sort()方法来对一个简单的数据列表排序.但是当ArrayList是由自定义对象组成的,就需要使用comparable或者comparator接口了.在使用这两者 ...

  4. Java ArrayList源码剖析

    转自: Java ArrayList源码剖析 总体介绍 ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现.除该类未实现同步外 ...

  5. Java ArrayList 源代码分析

    Java ArrayList 之前曾经参考 数据结构与算法这本书写过ArrayList的demo,本来以为实现起来都差不多,今天抽空看了下jdk中的ArrayList的实现,差距还是很大啊 首先看一下 ...

  6. Java ArrayList trimToSize()

    前几天看了Java ArrayList,没有明白trimToSize()这个方法是什么意思,所以看了一下源码并且debug一下自己的一个例子,明白了其中的含义.贴在这里. ArrayList al = ...

  7. jdk 1.8下 java ArrayList 添加元素解析

    转载请注明http://www.cnblogs.com/majianming/p/8006452.html 有人问我,java ArrayList底层是怎么实现的?我就回答数组,他再问我,那它是怎么实 ...

  8. Java ArrayList【笔记】

    Java ArrayList[笔记] ArrayList ArrayList基本结构 ArrayList 整体架构比较简单,就是一个数组结构 源码中的基本概念 index 表示数组的下标,从 0 开始 ...

  9. JAVA - ArrayList是否会越界?

    JAVA - ArrayList是否会越界? ArrayList并发add()可能出现数组下标越界异常. ArrayList是实现了基于动态数组的数据结构. LinkedList是基于链表的数据结构 ...

  10. 【简易版】Java ArrayList(增删改查)

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: (1)动态的增加和减少元素 (2)实现了ICollectio ...

随机推荐

  1. 怎样用ZBrush中的Curves和Insert笔刷创建四肢

     之前的ZBrush教程给大家介绍了人体结构比例和肌肉走向,同时使用ZBrush®软件中的CuverTube笔刷为模型添加了颈部和手臂.使用InsertSphere笔刷添加腰部,本讲将继续使用Curv ...

  2. python中*args和**args的不同

    上一段代码,大家感受一下 def test_param(*args): print(args) def test_param2(**args): print(args) test_param('tes ...

  3. Centos7网络监控

    EPEL是企业版 Linux 附加软件包的简称,EPEL是一个由Fedora特别兴趣小组创建.维护并管理的,针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS.Scientif ...

  4. HDU 4419 Colourful Rectangle --离散化+线段树扫描线

    题意: 有三种颜色的矩形n个,不同颜色的矩形重叠会生成不同的颜色,总共有R,G,B,RG,RB,GB,RGB 7种颜色,问7种颜色每种颜色的面积. 解法: 很容易想到线段树扫描线求矩形面积并,但是如何 ...

  5. Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载

    最近 Google 被墙了, 上传一下自己收集的 Android 开发环境, 下面给出的官网链接也可以下载; http://www.androiddevtools.cn/ 1. 百度网盘下载地址 An ...

  6. ASP.NET MVC+WCF+NHibernate+Autofac 框架组合(一)

    学习了Spring.NET+NHibernate的框架,觉得Spring.NET框架不够轻量,配置来配置去的比较头疼,所以把Spring.NET换成了Autofac框架,同时加入WCF框架整了一个组合 ...

  7. [转]World Wind Java开发之四——搭建本地WMS服务器

    在提供地理信息系统客户端时,NASA还为用户提供了开源的WMS Server 服务器应用:World Wind WMS Server.利用这个应用,我们可以架设自己的WMS服务并使用自己的数据(也支持 ...

  8. IBatis.Net学习笔记七--日志处理

    IBatis.Net中提供了方便的日志处理,可以输出sql语句等调试信息. 常用的有两种:1.输出到控制台:   <configSections>    <sectionGroup  ...

  9. sql语句or与union all的执行效率比较

    看到一篇文章是讲sql语句or与union all的执行效率比较的,以前没怎么注意这个问题,感觉文章写的不错,转来一看. 文章原链接:http://www.cunyoulu.com/zhuanti/q ...

  10. MVC中利用ActionFilterAttribute过滤关键字

    在开发过程中,有时候会对用户输入进行过滤,以便保证平台的安全性.屏蔽的方法有很多种,但是今天我说的这种主要是利用MVC中的ActionFilterAttribute属性来实现.由于MVC天然支持AOP ...