Java学习心得(三)

一.Deque(双端队列)

1.peek和poll方法

	//peek:检索头部元素但不会删除
	//peekFist:头部不删除
	//peekLst:尾部不删除

	//poll:检索头部元素并且删除
	//pollFist:头部并且删除
	//pollLast:尾部并且删除

2.push和pop方法

	//push:压栈(添加到头部)
	//pop:出栈(得到头部元素并且弹出)

二.Queue(单向队列)

例: GMS系统

要求

  • 1.构建数据结构Deque
  • 2.大小不能超过10
  • 3.构建物流对象Goods:
    • 3.1 主键id
    • 3.2 产品名称name
    • 3.1 产品价格price
    • 3.2 产品入库时间
  • 4.根据当前入库时间的毫秒数进行添加,当超过10以后,删除掉首项,并且提示仓库已满
class Goods{
	private Integer id;
	private String name;
	private double price;
	private Date date;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	
}

public class GoodsManagerSystem {
	public static void main(String[] args) throws InterruptedException {
		Deque<Goods> deque=new LinkedList<>();
		System.out.println(deque.size());
	    int i=0;
		while(deque.size()<10){
			i++;
			Goods good=new Goods();
			good.setId(i);
			good.setName("物品"+i);
			good.setPrice(i*10);
			//获得当前时间
			Date date=new Date();
			//获得时间毫秒
			Long l=date.getTime();//后期针对毫秒数可以进行排序
			good.setDate(date);
			//添加到队列中
			deque.offer(good);
			Thread.sleep(1000);//作用:每1000毫秒执行一次
			System.out.println("商品"+good.getName()+"正在入库...");
		}
		Goods g=deque.poll();
		System.out.println("仓库已接近临界点+"+
						g.getName()+"还未被取走");
	}
}

三.比较

ArrayList----有序可重复,有下标,可以在中间进行删除,修改添加,查询.删除和修改的效率低,查询遍历效果好,
			 主要原因它的结构是数组的底层
			 
LinkedList---删除和修改的效率高,但是查询效率低,需要逐个遍历,主要是因为链表的结构

Deque--------双端队列,可以前后进行,添加,首尾查询,删除,
             add()  addLast addFirst offer.....element
			 poll:移除首项元素并且删除,返回当前元素对象
			 peek:得到首项元素但不删除
             包含可以使用栈结构的方法push,pop
             
Queue--------单向队列,可以进行,添加单方向添加,查询,删除
             区别于Deque,无push和pop方法
			 并且只有六个方法:add() element() offer() peek() poll() remove()

四.比较器Collections

1.重写对象的comparable接口后

	//大于0:一般和默认的自然排序一致,升序
	//小于0:相反,降序
	//等于0:当两个对象需要比较的数据一致,以插入顺序为准

2.当我们需要临时修改排序规则时,直接在比较方法中使用匿名内部类的方式来规定排序规则,一般在排序规则多变的时候建议使用

五.Map<K,V>

	//定义map时,K的hashcode一定要重写!
	//K的hashcode值决定了存放位置,以及去重等,,,
	//建议equals也重写
  • 迭代::两种
    1.keySet 键值Set集合—>使用迭代器或者增强for循环迭代即可然后根据key得到vale–>get
    2.entrySet 键值对集合,一组一组值的集合

例. 判定当前字符串中有多少个字符是一样的,并且将字符放到key保存 数量放到value保存

public class ContainsKeyTest {
	public static void main(String[] args) {
		String s="dfafdjkhalfkhdk,l";
		//去空格,或者其他符号,比如逗号之类的
		s=s.replaceAll("[^a-zA-Z]+", "");
		//Map<字符,字符的个数>
		Map<Character,Integer> map=new HashMap<>();		
		char[] ch=s.toCharArray();
		for(int i=0;i<ch.length;i++){
			//判定,如果存在,重新添加覆盖以前的数据,并且value+1
			if(map.containsKey(ch[i])){
				map.put(ch[i], map.get(ch[i])+1);
			}else{//如果没有,将该字符添加到map中,数量初始置位1
				map.put(ch[i], 1);
			}
		}
		System.out.println(map);
	}
}

Hashtable和HashMap的区别

  • Hashtable:线程安全的 k和v不能为空的
  • HashMap:线程不安全的 map可以都为空
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值