练习链表的增删改查方法代码、set和map集合练习、栈和队列的peek和pop方法的使用

链表的增删改查代码练习:

了解链表的增删改查的操作步骤:

package cn.tedu.Test;
import java.util.LinkedList;
public class DemoLinkedList {

	private int size = 0; // 节点个数
	private Node first; // 第一个节点
	private Node last; // 最后一个节点

	//无参构造方法
        public DemoLinkedList(){
        	//this();
        	LinkedList list=new LinkedList();
        }
        //添加元素
	public void add(String str) {
		Node node =new Node(null,str,null);
		if(size==0){
			this.first=node;
			this.last=node;
		}else{
			this.last.next=node;//新插入的node等于当前链表的最后一个的下一个
			node.prev=this.last;//新插入的node等于当前列表的最后一个
			this.last=node;//当前列表的最后一个变成node
		}
		size++;
	}
        //插入
	public void add(int index, String str) {
		//最后插入的调用add方法
		if(index==size){
			this.add(str);
			return;
		}
		Node node =new Node(null,str,null);
		if(index==0){
			//在链表的最前面
			node.next=this.first.prev;//node的下一个变成当前列表的第一个的前一个
			this.first.prev=node;//当前列表的第一个的前一个变成node
			this.first=node;
		}else{
			Node node1 =this.getNode(index);
			node1.prev.next=node;//新插入的node等于原本node1的前一个的下一个位置上
			node.prev=node1.prev;//将原本的node1的前一个的信息传递给当今插入的node的前一个
			node1.prev=node;//将原本位置上的node1的前一个变为插入的node
			node.next=node1;//node的下一个变为原本的node1
		}
	}
        // 获取指定位置的节点
	private Node getNode(int index) {
		Node node = this.first;
		for(int i=0;i<index;i++){
			node=node.next;
		}
		return node;
		
		
	}
        //删除
	public void remove(int index) {
		if(index==0){//如果删除的是第一个
			this.first.next.prev=null;//把链表的第二个的前一个索引变为空
			this.first=this.first.next;//将这条链表的第一个位置上的值变成第二个的值
			
		}else if(index==size-1){//如果删除的是最后一个
			this.last.prev.next=null;
			this.last=this.last.prev;
		}else{
			Node node =this.getNode(index);
			node.prev.next=node.next;//node[index-1]下一个=node[index+1]
			node.next.prev=node.prev;//node[index+1]前一个=node[index-1]
		}
	}
        //返回节点的内容
	public String get(int index){
		return this.getNode(index).data;
	}
	// 返回元素个数
	public int size(){
		return size;
	}
	//利用节点存储数据
	private class Node {
		Node prev; // 上一个节点
		String data; // 元素
		Node next; // 下一个节点

		public Node(Node prev, String data, Node next) {
			super();
			this.prev = prev;
			this.data = data;
			this.next = next;
		}
	}
}

栈和队列的peek和pop方法等:

package cn.tedu.stack;

import java.util.LinkedList;
import java.util.Stack;

public class Demo {
	public static void test(){
		//如果栈为空,那么peek和pop都会出现运行时异常
		//push方法表示压栈,peek和pop表示返回栈顶元素,peek不弹栈
		Stack stack =new Stack();
		stack.push("hello");
		stack.push("abcd");
		System.out.println(stack);//从栈低到栈顶的输出方式   [hello, abcd]
		//都是返回栈顶的第一个元素,pop是弹出
		System.out.println(stack.pop());//弹栈的方式,将数据弹出    abcd
		System.out.println(stack.peek());//hello
	}
	public  static void test2(){
		LinkedList<String> list =new LinkedList<>();
		list.push("hello");
		list.push("hello1");
		list.push("hello2");
		list.push("hello3");
		//输出的是栈顶到栈底
		System.out.println(list);  //[hello3, hello2, hello1, hello]
		System.out.println(list.pop());//hello3
		System.out.println(list);//[hello2, hello1, hello]
	}
	public static void main(String[] args) {
		test();
		test2();
		LinkedList<String> list =new LinkedList<>();
		System.out.println(list.poll());//null
		System.out.println(list);//[]
		list.offer("a");
		list.offer("a2");
		list.offer("a1");
		System.out.println(list.poll());//会弹出队列数据    a
		System.out.println(list.peek());//a2
		System.out.println(list);//[a2, a1]
	}
}

map和set的数据的使用和练习:

package cn.tedu.demo;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class Demo {
	public static void test(){
		Map<String,Object>  map=new HashMap<>();
		//添加元素
		map.put("a", 97);
		map.put("x", 95);
		//如果k相同,则改变原来的value值
		map.put("a", 98);
		map.put("c", 90);
		map.remove("c");
		//获取内部的值
		System.out.println(map.get("a"));//98
		//如果k不存在,则返回值为null
		System.out.println(map.get("c"));//null
		
	}
	public static void test2(){
		Map<String,Object> stu = new HashMap<>();
		stu.put("id", "201900001");
		stu.put("name", "admin");
		stu.put("phone", "1563333333");
		stu.put("age", 18);
		//对于信息较多的可以使用类表示一个对象
		//stu.put("address", new Address("",""));
		stu.put("address", "光谷软件园");
		
		System.out.println(stu.containsKey("name"));
		System.out.println(stu.containsValue("admin"));
		
		
	}
	public static void test3(){
		Map<String,Object> stu = new HashMap<>();
		stu.put("id", "201900001");
		stu.put("name", "admin");
		stu.put("phone", "1563333333");
		stu.put("age", 18);
		stu.put("address", "光谷软件园");
		//第一种方式
		//得到一个key集合
		Set<String> keys = stu.keySet();
		for(String key:keys){
			System.out.println(key+":"+stu.get(key));
		}
		//第二种方式
		//返回一个实体对象
		System.out.println("-----------------------");
		Set<Entry<String,Object>>stus = stu.entrySet();
		for(Entry<String,Object> e:stus){
			System.out.println(e.getKey()+" :"+e.getValue());
		}
		//第三种方式
		//
		System.out.println("-----------------------");
		stu.forEach((k,v)->System.out.println(k+" :"+v));
		
		//输出一个值的集合
		System.out.println("---------------------------");
		Collection<Object> coll=stu.values();
		for(Object obj:coll){
			System.out.println(obj);
		}
		stu.put(null, null);
	}
	public static void test4(){
		//接收键盘输入一个字符串,统计字符的个数
		Scanner sc=new Scanner(System.in);
		System.out.println("input one String:");
		String str=sc.next();
		Map<Character,Integer> s = new HashMap<>();
		int count =0;
		for(int i=0;i<str.length();i++){
			char c=str.charAt(i);
			//s.put(i, c);
			if(s.containsKey(c)){
				
				//s.get(c);
				++count;
				s.put(c,++count);
			}else{
				s.put(c, 1);
			}
			
		}s.forEach((k,v)->System.out.print(k+"="+v+"个   "));
		/*Set keys = s.keySet();
		for(Integer key:keys){
			System.out.println(key+":"+s.get(key));
		}*/
	}
	public static void main(String[] args) {
		test4();
		
	}

}

你可能感兴趣的:(代码练习,基础知识)