1. 程式人生 > >JAVA SE篇--05 棧、佇列、HashMap

JAVA SE篇--05 棧、佇列、HashMap

1.佇列

    java.util.Queue 佇列可以存放一組元素,但是存取元素必須遵循,先進先出的原則。

public class QueueDemo {
	public static void main(String[] args) {
		/*
		 * LinkedList也實現了佇列介面,因為它可以儲存一組元組
		 * 並且收尾增刪快,正好符合佇列的特點
		 */
		Queue<String> queue=new LinkedList<String>();
		queue.offer("one");
		queue.offer("two");
		queue.offer("three");
		queue.offer("four");
		
		System.out.println(queue);
		/*
		 * E poll()
		 * 出隊操作,從隊首獲取元素,獲取後該元素就從佇列中刪除了
		 */
		String str=queue.poll();
		System.out.println(str);
		System.out.println(queue);
		
		/*
		 * E peek()
		 * 引用隊首元素,但是不做出隊操作
		 */
		str=queue.peek();
		System.out.println(str);
		System.out.println(queue);
		
		System.out.println("遍歷開始");
		System.out.println("size:"+queue.size());
		for(int i=queue.size();i>0;i--) {
			str=queue.poll();
			System.out.println("元素:"+str);
		}
		System.out.println("遍歷完畢");
		System.out.println(queue);
	}
}

2.棧

    儲存一組元素,但是存取元素必須遵循先進後出原則,通常為了實現後退這類功能會使用。

public class StackDemo {
	public static void main(String[] args) {
		/**
		 * java.util.Deque
		 * 雙端佇列兩端都可以進出隊
		 * 當只調用從一端進出隊操作時,就形成了棧結構
		 * 因此,雙端佇列為棧提供了兩個方法
		 * push,pop
		 */
		
		/*
		 * void push(E E)
		 * 入棧操作,最後入棧的元素在棧頂
		 */
		Deque<String> stack=new LinkedList<String>();
		stack.push("one");
		stack.push("pop");
		stack.push("three");
		stack.push("four");
		System.out.println(stack);
		
		while(stack.size()>0) {
			String str=stack.pop();
			System.out.println(str);
		}
	}
}

3.Map

    java.util.Map :Map看起來像是一個多行兩列的表格,一key-value對的形式存放元素,在map中key不允許重複(重複是依靠key的equals判斷).常用的實現類為:HashMap

public class MapDemo1 {
	public static void main(String[] args) {
		Map map=new HashMap();
		/*
		 * V put(K k,V v)
		 * 將給定的key-value對存入Map
		 * 由於Map要求key不允許重複,所以使用Map已有的key存入一個新的value,
		 * 那麼返回值為該key原來對應的value。若是一個新的value,則返回值為null
		 */
		
		map.put("語文", 99);
		map.put("數學", 97);
		map.put("英語", 96);
		
		System.out.println(map);
		
		
		/*
		 * V Get(K k)
		 * 根據給定的key獲取value,若當前Map中沒有給定的key,則返回值為null
		 */
		Integer value=(Integer) map.get("數學");
		System.out.println(value);
		
		/*
		 *	V remove(K v) 
		 *刪除給定的key所對應的key-value對
		 *返回值為被刪除的key-value對中的value
		 */
		
	}
}

4.遍歷Map

    遍歷所有的key;遍歷所有的key-value對;遍歷所有的value

public class MapDemo2 {
	public static void main(String[] args) {
		Map<String, Integer>map=new HashMap<String,Integer>();
		map.put("語文", 99);
		map.put("數學", 97);
		map.put("英語", 96);		
		System.out.println(map);
		
		/*
		 * 遍歷所有的key
		 * Set<k> keySet()
		 * 該方法會將當前Map中所有的key存入一個Set集合後返回,那麼遍歷該集合
		 * 就等於遍歷了所有的key
		 */
		Set<String>keySet=map.keySet();
		for(String str:keySet) {
			System.out.println(str);
		}
		
		/*
		 * 遍歷每一組鍵值對
		 * Map中每一組鍵值對都是由Map的內部類
		 * java.util.Map.Entry的一個例項表示的的
		 * Entry有兩個方法:getKey,getValue。可以分別獲取這一組鍵值對的key與value
		 * 
		 * Set<Entry>entrySet
		 * 該方法會將Map中每一組鍵值對(Entry例項)
		 * 存入一個Set集合返回
		 */
		Set<Entry<String,Integer>>entrySet=map.entrySet();
		for(Entry<String,Integer> e:entrySet) {
			String key=e.getKey();
			Integer value=e.getValue();
			System.out.println(key+value);
		}
		
		/*
		 * 遍歷所有的value
		 * Collection values()
		 *該方法會將當前Map中所有的value存入一個集合後返回
		 */
		Collection<Integer> values=map.values();
		for(Integer value:values) {
			System.out.println(value);
		}
	}
}

5.檔案操作

/**
 * java.io.File
 * File的每一個例項可以表示檔案系統中的一個檔案或目錄
 * 使用File可以:
 * 1、訪問檔案或目錄的屬性(大小、名字、修改時間等)
 * 2.操作檔案或目錄(建立,刪除檔案和目錄)
 * 3.訪問目錄中的所有內容
 * 
 * 但是不可以訪問檔案資料
 * @author Administrator
 *
 */
public class FileDemo1 {
	public static void main(String[] args) {
		File file=new File("."+File.separator+"demo.txt");
		
		//獲取名字
		String name=file.getName();
		System.out.println("name:"+name);
		
		//大小
		long length=file.length();
		System.out.println("大小為:"+length+"位元組");
		
		//是是否是檔案
		boolean isFile=file.isFile();
		System.out.println("是否為檔案:"+isFile);
		
		//是否為目錄
		boolean isDirectory=file.isDirectory();
		System.out.println("是否為目錄:"+isDirectory);
		
		//是否隱藏了
		boolean isHidden=file.isHidden();
		System.out.println("是否隱藏了"+isHidden);
		
		//最後修改時間
		long time=file.lastModified();
		Date date=new Date(time);
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
		System.out.println(sdf.format(date));
	}
}