欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java基础的一些东西

程序员文章站 2022-05-21 15:17:01
...

1,分析:HashMap  TreeMap 键怎么做到唯一的,不重复的  

     HashMap判断键唯一的方式与HashSet是一样

     当我们使用Map集合,添加自定义了对象[元素],注意判断元素唯一,

  HashMap需要:自定义元素的类,中,需要覆写hashCode equals

    HashMap 代码示例:

    public static void main(String[] args) {

             HashMap hmp = new HashMap();

             Student stu1 = new Student("小明",10);

             Student stu2 = new Student("小明",20);

             hmp.put(stu1, 18);

             hmp.put(stu2, 18);

             System.out.println(hmp.size());

             System.out.println(hmp);

}

       class Student{

          int age; 

          String name;

          public Student(String name,int age) {

              super();

              this.name = name;

              this.age = age;

    }

//@Override

//public int hashCode() {

//

return 0;

//}

//@Override

//public boolean equals(Object obj) {

//return false;

//}

 

 

@Override

public String toString() {

// TODO Auto-generated method stub

return name+"-"+age;

}

 

 

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + age;

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;

}

 

 

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Student other = (Student) obj;

if (age != other.age)

return false;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

TreeMap判断键唯一的方式与TreeSet一样

TreeMap需要:具有自然排序的能力,或者给指定定制比较器

下面是 指定定制比较器代码

 

public static void main(String[] args) {

//

Student stu1 = new Student("小明",10);

Student stu2 = new Student("小明",20);

 

Comparator<Object> aa = new Comparator<Object>() {

 

@Override

public int compare(Object o1, Object o2) {

// TODO Auto-generated method stub

return 1;

}

};

TreeMap tm = new TreeMap(aa);

tm.put(stu1, 50);

tm.put(stu1, 50);

System.out.println(tm.size());

System.out.println(tm);

 

}

class Student{

int age;

String name;

public Student(String name,int age) {

super();

this.name = name;

this.age = age;

}

 

 

 

@Override

public String toString() {

// TODO Auto-generated method stub

return name+"-"+age;

}

 

}

2,LinkedList和ArrayList问题

   ArrayList底层使用时数组。LinkedList使用的是链表。

  数组查询具有所有查询特定元素比较快。而插入和删除和修改比较慢(数组在内存中是一块连续的内存,如果插入或删除是需要移动内存)

  链表不要求内存是连续的,在当前元素中存放下一个或上一个元素的地址。查询时需要从头部开始,一个一个的找。所以查询效率低。插入时不需要移动内存,只需改变引用指向即可。所以插入或者删除的效率高

ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList使用在查询比较少而插入和删除比较多的情况。

 

但是:

实际情况在数据少时linklist比较快,而数据多是arraylist要快的多。

3,