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