允许重复的子接口List

一 List接口概述

List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。因为List集合默认按元素的添加顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1。

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

 

二 List集合常规用法

1 代码示例

import java.util.*;

public class ListTest
{
	public static void main(String[] args)
	{
		List books = new ArrayList();
		// 向books集合中添加三个元素
		books.add(new String("爷爷的青春岁月"));
		books.add(new String("奶奶的青春岁月"));
		books.add(new String("妈妈的青春岁月"));
		System.out.println(books);
		// 将新字符串对象插入在第二个位置
		books.add(1 , new String("爸爸的青春岁月"));
		for (int i = 0 ; i < books.size() ; i++ )
		{
			System.out.println(books.get(i));
		}
		// 删除第三个元素
		books.remove(2);
		System.out.println(books);
		// 判断指定元素在List集合中位置:输出1,表明位于第二位
		System.out.println(books.indexOf(new String("爸爸的青春岁月"))); //①
		//将第二个元素替换成新的字符串对象
		books.set(1, new String("儿子的幻想"));
		System.out.println(books);
		//将books集合的第二个元素(包括)
		//到第三个元素(不包括)截取成子集合
		System.out.println(books.subList(1 , 2));
	}
}

 2 运行结果

[爷爷的青春岁月, 奶奶的青春岁月, 妈妈的青春岁月]

爷爷的青春岁月

爸爸的青春岁月

奶奶的青春岁月

妈妈的青春岁月

[爷爷的青春岁月, 爸爸的青春岁月, 妈妈的青春岁月]

1

[爷爷的青春岁月, 儿子的幻想, 妈妈的青春岁月]

[儿子的幻想]

3 代码分析

此代码演示了List集合的常规用法。

 

三List集合的重要方法equls应用

1 代码示例

import java.util.*;

class A
{
	public boolean equals(Object obj)
	{
		return true;
	}
}
public class ListTest2
{
	public static void main(String[] args)
	{
		List books = new ArrayList();
		books.add(new String("网络运维与管理"));
		books.add(new String("电脑黑客攻防"));
		books.add(new String("网络管理工具"));
		System.out.println(books);
		// 删除集合中A对象,将导致第一个元素被删除
		books.remove(new A());     // ①
		System.out.println(books);
		// 删除集合中A对象,再次删除集合中第一个元素
		books.remove(new A());     // ②
		System.out.println(books);
	}
}

2 运行结果

[网络运维与管理, 电脑黑客攻防, 网络管理工具]

[电脑黑客攻防, 网络管理工具]

[网络管理工具]

3 代码分析

从上面代码的运行效果来看,执行①处代码时,程序试图删除一个A对象,List将会调用该A对象的equal方法依次与集合元素进行比较,如果该equal方法以某个集合元素作为参数时返回true,List将会删除该元素,A类重写了equal方法,该方法总是返回true。所以每次从List集合中删除A对象时,总是删除List集合中的第一个元素。

 

四 Java 8新增List方法应用

1 代码示例

import java.util.*;

public class ListTest3
{
	public static void main(String[] args)
	{
		List books = new ArrayList();
		// 向books集合中添加4个元素
		books.add(new String("TCP/IP协议大全"));
		books.add(new String("Visual C++"));
		books.add(new String("SQl server范例大全"));
		books.add(new String("现代操作系统"));
		// 使用目标类型为Comparator的Lambda表达式对List集合排序
		books.sort((o1, o2)->((String)o1).length() - ((String)o2).length());
		System.out.println(books);
		// 使用目标类型为UnaryOperator的Lambda表达式来替换集合中所有元素
		// 该Lambda表达式控制使用每个字符串的长度作为新的集合元素
		books.replaceAll(ele->((String)ele).length());
		System.out.println(books); // 输出[6, 10, 10, 14]

	}
}

 

2 运行结果

[现代操作系统, TCP/IP协议大全, Visual C++, SQl server范例大全]

[6, 10, 10, 14]

3 代码分析

该代码演示了sort方法和replaceAll这两个Java 8新增方法,他们使用了Lambda表达式:其中sort方法Lambda表达式指定的排序规则是:字符长度越长,字符串越大,一次执行完之后,List集合中的字符串会由短到长的顺序排列。replaceAll方法的Lambda表达式指定了替换集合元素的规则:直接用集合元素的长度作为新的集合元素。执行完该方法后,集中的元素被替换为[6, 10, 10, 14]。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值