Java学习笔记——集合工具类

Stack类

栈的特点是先进后出。
在Java程序里面使用Stack来描述栈的操作,定义如下:
public class Stack<E> extends Vector<E>
采用如下两个方法:

  • 入栈:public E push(E item);
  • 出栈:public E pop()
    【范例】实现栈的操作
package demo;

import java.util.Stack;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Stack<String> st = new Stack<String>();
		st.push("asd");
		st.push("ad");
		st.push("asd");
		System.out.println(st);
		System.out.println(st.pop());
		
		System.out.println(st.pop());
		System.out.println(st);
	}
}

Queue队列

队列的特点是先进先出。
在这里插入图片描述
如果将队列应用在多线程的“生产者与消费者”的模型处理上,那么对于生产者过快的情况下就没有必要等待消费者获取数据了,可以将所有的内容直接保存在队列之中。队列的实现可以使用LinkedList子类来完成。
队列的使用主要依靠Queue接口之中提供的方法来处理,如下方法:

  • 向队列之中追加数据:public boolean offer(E e),可以直接使用add()方法;
  • 通过队列获取数据:public E poll(),弹出后删除数据。
  • 【范例】实现队列操作
package demo;

import java.util.LinkedList;
import java.util.Queue;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Queue<String> queue = new LinkedList<String>();
		queue.offer("X");//追加队列数据,通过队尾追加
		queue.offer("A");//追加队列数据,通过队尾追加
		queue.offer("B");//追加队列数据,通过队尾追加
		queue.offer("D");//追加队列数据,通过队尾追加
		queue.offer("G");//追加队列数据,通过队尾追加
		System.out.println(queue.poll());//弹出数据、X
		System.out.println(queue.poll());//弹出数据、A
		System.out.println(queue.poll());//弹出数据、B
		System.out.println(queue);
	}
}
X
A
B
[D, G]

处理LinkedList子类之外,还有一个优先级队列的概念,可以使用PriorityQueue实现优先级队列(比较功能)。
在这里插入图片描述
【范例】使用优先级队列

package demo;

import java.util.PriorityQueue;
import java.util.Queue;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Queue<String> queue = new PriorityQueue<String>();
		queue.offer("X");//追加队列数据,通过队尾追加
		queue.offer("A");//追加队列数据,通过队尾追加
		queue.offer("B");//追加队列数据,通过队尾追加
		queue.offer("D");//追加队列数据,通过队尾追加
		queue.offer("G");//追加队列数据,通过队尾追加
		System.out.println(queue.poll());//弹出数据、X
		System.out.println(queue.poll());//弹出数据、A
		System.out.println(queue.poll());//弹出数据、B
		System.out.println(queue);
	}
}

properties操作类

资源文件(*.properties),这类文件的存储结构是按照“key=value”的形式存储的,这种形式与Map集合很相似,唯一区别是只能保存字符串。java.util包里面提供有properties子类型,是Hashtable的子类。
public class Properties extends Hashtable<Object, Object>
properties之中操作方法如下:

  • 设置属性:public Object setProperty(String key,String value)
  • 获取属性,不存在返回空:public String setProperty(String key)
  • 获取属性,不存在返回默认值:public String setProperty(String key,String defaultValue)
  • 输出属性内容:public void store(OutputStream out, String comments) throws IOException
  • 通过输入流读取属性内容:public void load(InputStream inStream) throws IOException.

【范例】属性的设置于取得

package demo;

import java.util.Properties;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Properties prop = new Properties();
		//设置属性只允许是字符串
		prop.setProperty("mldn", "www.mldn.com");
		prop.setProperty("baidu", "www.baidu.com");
		prop.setProperty("网易", "www.wangyi.com");
		System.out.println(prop.getProperty("mldn"));
		System.out.println(prop.getProperty("n","NotFound"));
		System.out.println(prop.getProperty("baidu"));
		System.out.println(prop.getProperty("网易"));
	}		
}

Properties可以像Map集合那样进行内容的设置与获取,但只能操作字符串,之所以会提供有Properties类还有一个最重要的功能是它可以通过输出流输出属性,也可以使用输入流读取属性内容。
【范例】将内容存储在文件中

package demo;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Properties prop = new Properties();
		//设置属性只允许是字符串
		prop.setProperty("mldn", "www.mldn.com");
		prop.setProperty("baidu", "www.baidu.com");
		prop.setProperty("网易", "www.wangyi.com");
		System.out.println(prop.getProperty("mldn"));
		System.out.println(prop.getProperty("n","NotFound"));
		System.out.println(prop.getProperty("baidu"));
		System.out.println(prop.getProperty("网易"));
		prop.store(new FileOutputStream(new File("d:"+File.separator+"info.properties")), "中文注释是看不见的-English");
	}		
}

通过代码可以实现资源文件的输入处理,但是如果输出的是中文则自动帮助用户进行转码处理。
【范例】读取资源文件

package demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		Properties prop = new Properties();
		prop.load(new FileInputStream(new File("d:"+File.separator+"info.properties")));
		System.out.println(prop.getProperty("mldn"));
	}		
}

使用Properties类型最大的特点是可以进行资源内容的输入与输出的处理操作, 在实际开发之中Properties往往用于读取文件资源配置的信息,这一点主要是在标准设计之中做程序初始化准备的时候使用。

Collections工具类

Collections是java提供的一组集合数据的操作工具类,也就是说利用它可以实现对集合实现各种操作。在这里插入图片描述
【范例】使用Collections操作List集合

package demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Properties;

public class JavaAPIDemo {
	public static void main(String[] args) throws Exception {
		List<String> all = new ArrayList<String>();
		Collections.addAll(all, "hello","world","!!!!","memeda!");
		System.out.println(all);
		Collections.reverse(all);
		System.out.println(all);
		Collections.sort(all);
		System.out.println(all);
		System.out.println(Collections.binarySearch(all, "memeda!"));
	}		
}

[hello, world, !!!!, memeda!]
[memeda!, !!!!, world, hello]
[!!!!, hello, memeda!, world]
2

Collection与Collections的区别?

  • Collection是集合接口,允许保存单值对象;
  • Collections是集合操作的工具类。

参考:https://edu.aliyun.com/lesson_1012_9095#_9095

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值