黑马程序员-----Java基础-----Collection-Set
2015-08-20 12:50
483 查看
-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
Set 集合的功能和collecttion是一致的。
Set :元素是无序(存入和取出顺序不一定一致),元素不可以重复
HashSet: 底层数据结构是哈希表。
HashSet是如何保证元素唯一性的
是通过元素的两个方法,hashcode和equals来完成
如果元素的HashSet值相同,才会判断equals是否为true
如果元素的hashcode值不同,不会调用equals
注意
对于判断元素是否存在,以及删除等操作,依赖的方法是hashcode和equals。
TreeSet:
//class Demo
//{
//
//}
public class HashSet
{
public static void main(String[] args)
{
// Demo d1 = new Demo();
// Demo d2 = new Demo();
// sop(d1);
// sop(d2);
//结果为Demo@1fc4bec
// Demo@dc8569
HashSet hs =new HashSet();
hs.add("java1");
hs.add("java2");
hs.add("java3");
hs.add("java4");
Iterator it = hs.iterator();
while(it.hasNext())
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
-----------------------
package Test1;
//按字符串长度排序
import java.util.*;
public class TreesetTest {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new Strlen());
ts.add("asd");
ts.add("aweqaa");
ts.add("atyd");
ts.add("agghj");
ts.add("agghj1356");
Iterator it = ts.iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
class Strlen implements Comparator
{
public int compare(Object o1,Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
if (num == 0)
return s1.compareTo(s2);
return num;
}
}
------------------------
package Test1;
/*
set:无序,不可以重复元素。
Hashset: 数据结构是哈希表,线程不同步
保证元素唯一性的原理,判断元素的hashcode值是否相同
如果相同,还会判断元素的equals方法,是否为true。
Treeset:可以对set集合中的元素进行排序。
底层数据结构是二叉树
保证元素唯一性的依据
compareTo方法return 0
TreeSet 排序方法的第一种方式,让元素自身具备比较性
元素需要实现Comeparable接口,覆盖compaerTo方法。
默认顺序,自然排序方式。
TreeSet的第二种排序方式
当元素自身不具备比较性时,或者具备的比较性不是所需要的,
这是就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
需求:
往treeset集合中存储自定义对象学生
想按照学生的年龄排序
记住,当排序时,当主要条件相同时,一定要判断次要条件。
comparable
compareTo 自然排序
*/
import java.util.*;
public class treeset1
{
public static void main(String[] args)
{
TreeSet ts =new TreeSet();
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi002",25));
ts.add(new Student("lisi003",22));
ts.add(new Student("lisi02",22));
Iterator it =ts.iterator();
while(it.hasNext())
{
Student stu =(Student)it.next();
System.out.println(stu.getName()+"---"+stu.getAge());
}
}
}
class Student implements Comparable //该接口强制让学生具备比较性
{
private int age;
private String name;
Student(String name,int age )
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Student))
throw new RuntimeException("bushixuesheng");
Student s =(Student)obj;
System.out.println(this.name+"--"+s.name);//打印原理
if(this.age > s.age)
return 1;
if(this.age == s.age);
{
return this.name.compareTo(s.name);//主要条件相同,看次要条件。
}
//return-1;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
---------------------------
package Test1;
/*
* 第二种方法。
定义了比较器,将比较器对像作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
定义了一个类,实现comparator接口,覆盖compare方法。
*/
import java.util.*;
class Student implements Comparable //该接口强制让学生具备比较性
{
private int age;
private String name;
Student(String name,int age )
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Student))
throw new RuntimeException("bushixuesheng");
Student s =(Student)obj;
System.out.println(this.name+"--"+s.name);//打印原理
if(this.age > s.age)
return 1;
if(this.age == s.age);
{
return this.name.compareTo(s.name);//主要条件相同,看次要条件。
}
//return-1;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
public class treeset2
{
public static void main(String[] args)
{
TreeSet ts =new TreeSet(new MyCompare());
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi002",25));
ts.add(new Student("lisi003",22));
ts.add(new Student("lisi02",22));
Iterator it =ts.iterator();
while(it.hasNext())
{
Student stu =(Student)it.next();
System.out.println(stu.getName()+"---"+stu.getAge());
}
}
}
class MyCompare implements Comparator
{
public int compare(Object o1,Object o2)
{
Student s1 = (Student)o1;
Student s2 = (Student)o2;
int num = s1.getName().compareTo(s2.getName());
if(num==0)
{
//new Integer(s1.getAge()).compareTo(new Integer(s2.getAge));
if(s1.getAge() > s2.getAge())
return 1;
if(s1.getAge()==s2.getAge())
return 0;
return -1;
}
return num;
}
}
Set 集合的功能和collecttion是一致的。
Set :元素是无序(存入和取出顺序不一定一致),元素不可以重复
HashSet: 底层数据结构是哈希表。
HashSet是如何保证元素唯一性的
是通过元素的两个方法,hashcode和equals来完成
如果元素的HashSet值相同,才会判断equals是否为true
如果元素的hashcode值不同,不会调用equals
注意
对于判断元素是否存在,以及删除等操作,依赖的方法是hashcode和equals。
TreeSet:
//class Demo
//{
//
//}
public class HashSet
{
public static void main(String[] args)
{
// Demo d1 = new Demo();
// Demo d2 = new Demo();
// sop(d1);
// sop(d2);
//结果为Demo@1fc4bec
// Demo@dc8569
HashSet hs =new HashSet();
hs.add("java1");
hs.add("java2");
hs.add("java3");
hs.add("java4");
Iterator it = hs.iterator();
while(it.hasNext())
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
-----------------------
package Test1;
//按字符串长度排序
import java.util.*;
public class TreesetTest {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new Strlen());
ts.add("asd");
ts.add("aweqaa");
ts.add("atyd");
ts.add("agghj");
ts.add("agghj1356");
Iterator it = ts.iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
class Strlen implements Comparator
{
public int compare(Object o1,Object o2)
{
String s1 = (String)o1;
String s2 = (String)o2;
int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
if (num == 0)
return s1.compareTo(s2);
return num;
}
}
------------------------
package Test1;
/*
set:无序,不可以重复元素。
Hashset: 数据结构是哈希表,线程不同步
保证元素唯一性的原理,判断元素的hashcode值是否相同
如果相同,还会判断元素的equals方法,是否为true。
Treeset:可以对set集合中的元素进行排序。
底层数据结构是二叉树
保证元素唯一性的依据
compareTo方法return 0
TreeSet 排序方法的第一种方式,让元素自身具备比较性
元素需要实现Comeparable接口,覆盖compaerTo方法。
默认顺序,自然排序方式。
TreeSet的第二种排序方式
当元素自身不具备比较性时,或者具备的比较性不是所需要的,
这是就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
需求:
往treeset集合中存储自定义对象学生
想按照学生的年龄排序
记住,当排序时,当主要条件相同时,一定要判断次要条件。
comparable
compareTo 自然排序
*/
import java.util.*;
public class treeset1
{
public static void main(String[] args)
{
TreeSet ts =new TreeSet();
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi002",25));
ts.add(new Student("lisi003",22));
ts.add(new Student("lisi02",22));
Iterator it =ts.iterator();
while(it.hasNext())
{
Student stu =(Student)it.next();
System.out.println(stu.getName()+"---"+stu.getAge());
}
}
}
class Student implements Comparable //该接口强制让学生具备比较性
{
private int age;
private String name;
Student(String name,int age )
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Student))
throw new RuntimeException("bushixuesheng");
Student s =(Student)obj;
System.out.println(this.name+"--"+s.name);//打印原理
if(this.age > s.age)
return 1;
if(this.age == s.age);
{
return this.name.compareTo(s.name);//主要条件相同,看次要条件。
}
//return-1;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
---------------------------
package Test1;
/*
* 第二种方法。
定义了比较器,将比较器对像作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
定义了一个类,实现comparator接口,覆盖compare方法。
*/
import java.util.*;
class Student implements Comparable //该接口强制让学生具备比较性
{
private int age;
private String name;
Student(String name,int age )
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Student))
throw new RuntimeException("bushixuesheng");
Student s =(Student)obj;
System.out.println(this.name+"--"+s.name);//打印原理
if(this.age > s.age)
return 1;
if(this.age == s.age);
{
return this.name.compareTo(s.name);//主要条件相同,看次要条件。
}
//return-1;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
public class treeset2
{
public static void main(String[] args)
{
TreeSet ts =new TreeSet(new MyCompare());
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi002",25));
ts.add(new Student("lisi003",22));
ts.add(new Student("lisi02",22));
Iterator it =ts.iterator();
while(it.hasNext())
{
Student stu =(Student)it.next();
System.out.println(stu.getName()+"---"+stu.getAge());
}
}
}
class MyCompare implements Comparator
{
public int compare(Object o1,Object o2)
{
Student s1 = (Student)o1;
Student s2 = (Student)o2;
int num = s1.getName().compareTo(s2.getName());
if(num==0)
{
//new Integer(s1.getAge()).compareTo(new Integer(s2.getAge));
if(s1.getAge() > s2.getAge())
return 1;
if(s1.getAge()==s2.getAge())
return 0;
return -1;
}
return num;
}
}
相关文章推荐
- set 命令特殊用法
- You must SET PASSWORD before executing this statement的解决方法
- 批处理 Set 命令详解 让你理解set命令第1/2页
- ASP中set与dim的区别(自己的理解)
- 深入C#中get与set的详解
- Rails Routes中new、collection、member的区别浅析
- sql Set IDENTITY_INSERT的用法
- set_include_path在win和linux下的区别
- jquery中常用的SET和GET
- 解决 The Controls collection cannot be modified because the control contains code blocks
- 大家注意vector, list, set, map成员函数erase
- 基于SQL中SET与SELECT赋值的区别详解
- mysql之set与enum的介绍
- php set_magic_quotes_runtime() 函数过时解决方法
- MySQL的FIND_IN_SET函数使用方法分享
- .net get set用法小结第1/3页
- mysqli_set_charset和SET NAMES使用抉择及优劣分析
- asp.net get set用法第1/2页
- Java集合类中文介绍
- Mysql中的find_in_set的使用方法介绍