List最为Collection接口的子接口,当然可以使用Collection接口里的全部方法。而且由于List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法:

public class ListTest {
public static void main(String[] args) {
List names = new ArrayList();
//向names集合中添加三个元素
names.add("lmx");
names.add("wgl");
names.add(new String("孙悟空"));
System.out.println(names);
//将新字符串对象插入在第二个位置
names.add(1, new String("猪八戒"));
//使用for循环遍历list
for(int i = 0; i < names.size(); i++) {
System.out.println(names.get(i));
}
//删除第三个元素
names.remove(2);
System.out.println(names);
//判断指定元素在List集合中的位置:输出1,表明位于第二位
System.out.println(names.indexOf(new String("猪八戒")));
//将第二个元素替换成新的字符串对象
names.set(1, new String("沙僧"));
System.out.println(names);
//将names集合的第二个元素(包括)到第三个元素(不包括)截取成子集合
System.out.println(names.subList(1, 2));
}
}

  List判断两个对象只要通过Equals()方法比较返回true即可,所以如果一个对象重写了equals()方法且返回值总是true,那么跟List集合中的元素比较时总是相等。看下面程序:

class A {
public boolean equals(Object obj) {
return true;
}
} public class ListTest2 {
public static void main(String[] args) {
List names = new ArrayList();
names.add(new String("lmx"));
names.add(new String("wgl"));
names.add(new String("孙悟空"));
System.out.println(names);
//删除集合中的A对象,将导致第一个元素被删除
names.remove(new A());
System.out.println(names);
//删除集合中的A对象,再次删除集合中的第一个元素
names.remove(new A());
System.out.println(names);
}
}

  与Set只提供了一个iterator()方法不同,List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法:

public class ListIteratorTest {
public static void main(String[] args) {
String[] names = {
"lmx",
"wgl"
};
List nameList = new ArrayList();
for(int i = 0; i < names.length; i++) {
nameList.add(names[i]);
}
ListIterator lit = nameList.listIterator();
while(lit.hasNext()) {
System.out.println(lit.next());
//在指定位置插入一个元素
lit.add("-----分隔符-----");
}
System.out.println("=====下面开始反向迭代=====");
while(lit.hasPrevious()) {//是否还有上一个元素
System.out.println(lit.previous());
}
}
}

  从上面程序中可以看出,使用ListIterator迭代List集合时,开始业务要采用正向迭代,即先使用next()方法进行迭代,在迭代过程中可以使用add()方法向上一次迭代元素的后面添加一个新元素。运行上面的程序,看到如下结果:

  下面代码使用LinkedList来实现队列和栈的操作:

public class LinkedListTest {
public static void main(String[] args) {
LinkedList names = new LinkedList();
//将字符串元素加入队列的尾部
names.offer("孙悟空");
//将一个字符串元素加入栈的顶部
names.push("wgl");
//将字符串元素添加到队列的头部(相当于栈的顶部)
names.offerFirst("lmx");
for(int i = 0; i < names.size(); i++) {
System.out.println(names.get(i));
}
//访问但不删除栈顶的元素
System.out.println(names.peekFirst());
//访问但不删除队列的最后一个元素
System.out.println(names.peekLast());
//将栈顶的元素弹出"栈"
System.out.println(names.pop());
//下面输出将看到队列的第一个元素被删除
System.out.println(names);
//访问并删除队列的最后一个元素
System.out.println(names.pollLast());
//下面输出将看到队列中只剩下中间一个元素
System.out.println(names);
}
}

List基本用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

  10. [转]thinkphp 模板显示display和assign的用法

    thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...

随机推荐

  1. Mining Your Own Business UVALive - 5135(点双联通分量)

    these days I‘m tired!,but very happy... #include<cstdio> #include<cstring> #include<s ...

  2. MapReduce(五) mapreduce的shuffle机制 与 Yarn

    一.shuffle机制 1.概述 (1)MapReduce 中, map 阶段处理的数据如何传递给 reduce 阶段,是 MapReduce 框架中最关键的一个流程,这个流程就叫 Shuffle:( ...

  3. Codeforces 894.E Ralph and Mushrooms

    E. Ralph and Mushrooms time limit per test 2.5 seconds memory limit per test 512 megabytes input sta ...

  4. C++并发编程 异步任务

    C++并发编程 异步任务 异步任务 std::async (1) std::async 会返回一个 std::future 对象, 这个对象持有最终计算出来的结果. 当需要这个值时, 只需要调用对象的 ...

  5. 9.Android UiAutomator正则表达式的使用

    一.正则表达式元字符: 1.一些常用元字符: 元字符 描述 . 表示任意一个字符 \s 空格字符(空格键.tab.换行.换页.回车) \S 非空字符串([^\s]) \d 一个数字(相当于[0-9]中 ...

  6. mysql 自动记录数据插入及最后修改时间

    总结: `uptime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 原文 应用场景: 1.在数据 ...

  7. ubuntu环境下添加中文输入法

    1.下载软件包 打开终端,输入命令 sudo apt-get install fcitx-table-wbpy 2.打开 system settings-> language support-& ...

  8. JS中的匿名函数自执行、函数声明与函数表达式

    先看一段jQuery源码中匿名函数自执行的例子: (function( window, undefined ) { // jquery code })(window); 另外一种常见的写法: +fun ...

  9. 如何卸载掉eclipse中的插件

    First-->Help->About Eclipse Second--> Third-->

  10. Visual Studio Code 如何编写运行 C、C++ 程序?

    0. 前言 VS Code 是微软发布一款跨平台的源代码编辑器,其拥有强大的功能和丰富的扩展,使之能适合编写许多语言. 本文面向初学者(但不是纯小白),分享一点我配置C/C++的经验. 本文所有内容均 ...