List基本用法
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基本用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
- [转]thinkphp 模板显示display和assign的用法
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
随机推荐
- Immediate Decodability HDU - 1305(模板trie)
求这些01串是否有一个是另一个的前缀.. 就是求次数就好了嘛...emm... 网上竟然都用指针写.... #include<cstdio> #include<iostream> ...
- Day21-自定义分页
一. 先简单来个示例 1.1 在urls.py中增加1条,user_list from django.conf.urls import url,include from django.contrib ...
- DjangoORM使用mysql注意
注意事项1:需要在project下的setting里面做设置.让Django生成MySQL类型的数据库. 注意事项2:在Django内部,连MySQL的时候,需要添加下面2句代码: 4.******* ...
- 【BZOJ3771】Triple(生成函数,多项式运算)
[BZOJ3771]Triple(生成函数,多项式运算) 题面 有\(n\)个价值\(w\)不同的物品 可以任意选择\(1,2,3\)个组合在一起 输出能够组成的所有价值以及方案数. \(n,w< ...
- bzoj5055: 膜法师(BIT)
大水题WA了两发T T 记录一下a[i]的前缀和,a[i]*a[j]就是sigma(a[j]*sumi[j-1]) 记录一下a[i]*a[j]的前缀和,a[i]*a[j]*a[k]就是sigma(a[ ...
- angular 的 @Input、@Output 的一个用法
angular 使用 @input.@Output 来进行父子组件之间数据的传递. 如下: 父元素: <child-root parent_value="this is parent ...
- std::sort运行出core(segment fault)
http://note.youdao.com/noteshare?id=6aae09345e85ab55fe24ac959118a747
- 题解【bzoj2301 [HAOI2011]Problem b】
Description 求有多少个数对 \((x,y)\) ,满足$ a \leq x \leq b$ ,\(c \leq y \leq d\) ,且 \(\gcd(x,y) = k\),\(\gcd ...
- IBatisNet+Oracle.ManagedDataAccess打造无需安装oracle客户端和ODP即可连接oracle数据库
库环境: Oracle.ManagedDataAccess 版本:4.122.1.0 IBatisNet 版本:1.6.2 其实很简单的,只需在驱动配置那里添加上Oracle.ManagedData ...
- OD~~helloworld
要爆破的C程序源码: #include <stdio.h> int main() { int x; scanf("%d",&x); ) printf(" ...