java day13 Set与Map容器

LinkedList

LinkedList 是一种可以在任何位置进行高效地插入和删除操作的有序序列。
LinkedList:底层用双向链表实现的 List。特点:查询效率低,增删效率高,线程不安全。 ArrayList:底层用数
组实现的 List。特点:查询效率高,增删效率低,线程不安全。

手写简单Linkedlist

package day13.linkedlistdemo;
/**
*手写LinkedList的add方法
*	1.定义头节点
*	2.定义LinkedList的大小size
*	3.重写toString方法 用于显示结果
*
*/
public class MyLinkedList {
	//头节点
    private Node head;
    //LinkedList的大小
    private int size;
	//构造函数
    public MyLinkedList() {
    }

	//重写toString()方法
    @Override
    public String toString() {
        StringBuffer s = new StringBuffer();
        Node temp = head;
        while (temp!=null){
            s.append(temp.getData()+" ");
            temp= temp.getNext();
        }
        String s2 = s.toString().substring(0,s.toString().length()-1);
        return "MyLinkedList{" +
                "data=" + s2 +
                ", size=" + size +
                '}';
    }
	//手写LinkedList的add方法 
    public void add(Object object){
    
        Node newNode = new Node(object,null);
        if (null == head){
            head = newNode;
        }else{
            Node temp = head;
            while (temp.getNext() != null){
                temp = temp.getNext();
            }
            temp.setData(object);
        }
        size++;
    }

}
/**
* 节点Node 包含:
* 		1.数据项
* 		2.指向下个节点的地址
*  
* 
* */

class Node{
    private Object data;
    private Node next;

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public Node() {
    }

    public Node(Object data, Node next) {
        this.data = data;
        this.next = next;
    }


}

试着调用

package day13.linkedlistdemo;

public class MyLinkedListDemo {
    public static void main(String[] args) {
        MyLinkedList myLinkedList = new MyLinkedList();
        myLinkedList.add("hhh");
        myLinkedList.add("kkk");
        System.out.println(myLinkedList);
    }
}



Set接口

Set 接口中的元素无序不可重复:不包含重复元素,最多包含一个 null,元素没有顺序 。

HashSet

HashSetSet 接口的一个子类,主要的特点是:里面不能存放重复元素,而且采用散 列的存储方法,所以没有 顺序。这里所说的没有顺序是指:元素插入的顺序与输出的顺序不 一致。 使用重写 equalshashcode 来实现自
定义的类型的去重。
Java 中规定,两个内容 相同的对象应该具有相等的
Collection 类对象是否相等对象在调用 remove、contains 等方法时需要比较,这会涉及 到对象类型的 equals 方
法和 hashCode 方法;对于自定义的类型,需要重写 equals 和 hashCode 方法以实现自定义的对象相等规则。

Map接口

实现Map接口的类用来存储键(key)-值(value) 对。
Map 接口的实现类有HashMap和TreeMap等。
Map类中存储的键-值对通过键来标识,所以键值不能重复。
HashMap: 线程不安全,效率高. 允许key或value为null
HashTable:线程安全,效率低. 不允许key或value为null
Properties: HashTable的子类,key和value都是string

HashMap遍历例子

package day13.MapDemo;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.DoubleToIntFunction;

public class Demo {
    public static void main(String[] args) {
        Map<Integer,String> map =new HashMap();
        map.put(01,"dll");
        map.put(02,"znj");
        map.put(03,"ygd");

        //第一种遍历 使用keySet
        System.out.println("------keyset-------"    );
        Set<Integer> keySet = map.keySet();
        for (Integer i:keySet){
            System.out.println(i+"--->"+map.get(i));
        }
        //第二种遍历 使用values
        System.out.println("----------values----------");
        Collection<String> s= map.values();
        for (String s1:s){
            System.out.println(s1);
        }
        //第三种遍历 使用entrySet
        System.out.println("--------entrySet----");
        Set<Map.Entry<Integer,String>> set = map.entrySet();
        for (Map.Entry<Integer,String> entry:set){
            System.out.println(entry.getKey() + entry.getValue());
        }
    }
}

比较器

package com.xxxx.compare04;

import java.util.Comparator;
import java.util.TreeSet;

import com.xxxx.entity.Person;

/*
 * 定制比较规则:
 * 	1.内部比较器|自然排序
 * 		要当前比较的类型实现一个借口Comparable接口,重写compareTo方法,方法的内部制定比较规则
 *        硬编码习惯,不够灵活,每次修改源代码
 * 
 * 	2.外部比较器|自定义排序
 * 		使用任何一个实现类实现一个接口Comparator,重写compare方法,方法的内部制定比较规则
 * 
 * 
 * 课后练习: 使用 TreeSet存储Student类型数据,根据姓名比较
 */
public class CompareDemo01 {
	public static void main(String[] args) {
		//默认使用内部比较器
		//TreeSet set1 = new TreeSet();
		//指定使用参数比较器
		//TreeSet(Comparator<? super E> comparator) 
		Comparator<Person> com  = new Hehe();
		//Lambda 
		com  = (Person o1, Person o2)->{
			return o1.getHeight() - o2.getHeight();
		};
		TreeSet set1 = new TreeSet(com);
		set1.add(new Person("李四",19,168));
		set1.add(new Person("卢妹妹",16,172));
		set1.add(new Person("廖廖",17,165));
		
		System.out.println(set1);
		
	}
}

//自定义排序
class Hehe implements Comparator<Person>{

	//根据身高做降序排序
	@Override
	public int compare(Person o1, Person o2) {
		return o2.getHeight() - o1.getHeight();
	}
	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值