Java常用API(十一)——集合List相关

java.util.List接口是Collection一个常用子接口,表示可重复集,并且该集合有序。特点是可以通过下标操作元素。

常见实现类:

java.util.ArrayList为数组实现,查询性能更好。java.util.LinkedList为链表实现,增删元素性能更好,尤其收尾元素。
对性能没有极端要求时通常使用ArrayList。

List<String>list=new ArrayList<>();

E get(int index):获取指定下标对应元素。

E set(int index,E e):替换操作(将给定元素设置到指定位置,返回值为原位置对应的元素)。

void add(int index,E e):将给定元素插入到指定位置。

E remove(int index):删除并返回指定位置的元素。

List subList(int start,int end):List集合支持截取子。

Collection接口提供了一个方法toArray,可以将当前集合转换为一个数组。任何集合都可以转换为数组。

String[]strings=c.toArray(new String[c.size()]);

通过数组的工具类Arrays提供的方法:asList可以将一个数组转换为一个List集合。


String[]array={"1","2","3"};
List<String>list=Arrays.asList(array);

 Collections的该sort方法在排序集合时要求集合元素必须实现Comparable接口并重写其中定义的比较方法。否则编译出错,java API中常见数据类型都实现了该接 口,比如包装类和字符串。但是我们自定义的元素通常不要去实现该接口。因为当我们使用某个方法时,该方 法要求我们为其修改其他额外的代码,这个方法就具有侵入性,这样的方法对程序结构不利。尽量避免使用。 Collections.sort(list); 重载的Collections.sort(List,Comparator);该方法要求我们传入要排序的集合外,在额外传入一个比较器,该比较器是用来为集合元素定义一种比较大小的规则。这样sort方法就会对利用给定的比较器的比较规则对集合元素进行大小比较后自然排序。这也就不再要求集合元素必须去实现接口:Comparable了。

实现Comparator接口后要求重写compare,用来定义o1,o2大小关系,返回值为int型,该值不关心具体取值,只关注取值范围:当返回值>0:表示o1>o2。

Collections.sort(list,new Comparator<Point>() {
			public int compare(Point o1, Point o2) {
				int len1= o1.getX()*o1.getX()+o1.getY()*o1.getY();
				int len2= o2.getX()*o2.getX()+o2.getY()*o2.getY();
				return len1-len2;
			}
		});

工具类java.util.Collections 其提供了一个静态方法:sort,可以对List集合进行自然排序,即从小到大排序。

java.util.Queue接口是队列接口,规定了队列具备的相关方法。Queue接口继承自Collection,所以同时具备集合的相关方法。队列可以保存一组元素,但是存取元素必须遵循先进先出的原则。常用实现类:java.util.LinkedList。

Queue<String>queue=new LinkedList<>();
/**offer是入队操作,将元素添加到队列末尾 */
queue.offer("我");
/** E poll()  出队操作,获取队首元素,获取后该元素即从队列中移除 */
System.out.println(queue);
/**使用迭代器遍历不影响队列元素 */
for (String string : queue) {
	System.out.println(string);
}
/**peek方法是引用队首元素,获取该元素依然在队列中。 */
System.out.println(queue.peek());
//System.out.println(queue.poll());
/** 使用poll方法遍历队列,这种方式遍历后队列就没有元素了。 */
while(queue.size()>0) {
	System.out.println(queue.poll());
}
System.out.println(queue);

双端队列 java.util.Deque接口,该接口继承自Queue双端队列。是两端都可以做出入队列操作。常用实现类是java.util.LinkedList。

Deque<String>deque=new LinkedList<String>();
deque.offer("1");
deque.offerFirst("0");
deque.offerLast("0");
System.out.println(deque.pollFirst());
System.out.println(deque.pollLast());	

栈:双端队列若只从一端进出就形成了栈结构。栈结构存取元素遵循先进后出原则。通常我们使用栈是完成"后退"这样的功能。

Deque<String>stack=new LinkedList<String>();
stack.push("1");
System.out.println(stack.pop());
System.out.println(stack);
for (String string: stack) {
	System.out.println(string);
}
while (stack.size()>0) {
	System.out.println(stack.pop());
}
System.out.println(stack);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值