黑马程序员--03--集合

黑马程序员--03--集合
                                                         -------  android培训 java培训 、期待与您交流! ----------
/*
图片
从各种容器中抽取共同的特性,形成了体系,这种行为称为集合框架。
各种集合的特点:
          Set:
1、不允许元素重复。
2、不安特定的方式排序。
3、底层使用了Map的集合。
TreeSet:
1、单线程程序。
2、按自然顺序遍历集合,可自定义比较器进行排序。
3、底层结构是二叉树。
4、使用自定义类时需要重写equals方法或实现comparable接口。
5、可以在初始化时指定一个比较器。
HashSet:
1、单线程程序。
2、允许使用null元素。
3、不按指定顺序添加,无序的。
4、如果哈希值一样就会调用equals方法,否则不会调用equals。
5、底层数据结构是哈希表。
6、元素唯一。
--------------------------------------------------------------------
            List:
1、允许元素重复。
2、排列顺序就是加入时的顺序。
3、类似于数组,用户可以通过索引来访问集合中的元素。
ArrayList:
1、单线程程序。
2、使用此类时只需重写equals方法。
3、数组类型结构,带角标。不易于增删元素到某个指定位置。
4、允许元素重复。
5、先进先出队列操作。
6、允许null元素。
LinkedList:
1、单线程程序。
2、底层是链表结构。
3、易于删除和修改某个元素。
4、允许元素重复。
5、使用此类时只需重写equals方法。
6、允许使用null元素。
建议:经常需要增删元素使用LinkedList。
-----------------------------------------------------------------
Map:
1、Map中不能包含相同的key,每个key只能映射一个value。
2、由散列码的整数值确定存储位置。
3、Map集合没有迭代器,原理是将map集合转换成set集合,然后用set集合的迭代器。
4、entrySet()将此映射中包含的映射关系的集合用set()类型返回。 返回类型Set<Map.Entry<K,V>>。
5、keySet()将此映射中包含的键用set集合返回。返回类型Set<K>
TreeMap:
1、存在一定的顺序。
2、单线程程序。
3、可以在初始化时指定一个比较器用来排序。
4、要进行对比需要实现Comparator接口。
HashMap:
1、添加删除映射关系效率高。
2、允许使用null值和空键
3、要进行对比需要重写equals和hashcode方法。
4、除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。
5、不按顺序添加,无序。
6、单线程程序。

使用collection的toArray时创建数组的长度如果小于集合的size则会在内部创建一个新的数组,如果大于了集合的size就不会创建数组,而且是使用传递进来的数组。所以最佳的参数是".size()"。
例如:String []arr = al.toArray(new String[al.size()]); 


为什么要将数组变集合?因为变成集合可以使用集合的方法对数组进行操作。

为什么将集合变数组?为了限定对元素的操作,例如防止增删。  

当将基本数据类型数组作为集合的元素时保存的只是基本类型的数组。只有将对象集合作为集合的元素时存储的才是数组的元素。 

ArrayList有两种方法读取元素,一种是迭代器,另一种是for循环。Set只有迭代器一种读取元素的方法。 
*/

import java.util.*;
class Comp implements Comparator<Student> //单独编写一个用于作为比较器的类
{
public int compare(Student o1, Student o2)
{
return new Integer(o1.getAge()).compareTo(new Integer(o2.getAge()));
}
}
class Student //定义需要使用测试的类
{
private int age;
private String name;
Student(){}
Student(int age,String name)
{
this.age = age;
this.name = name;
}
public int hashCode()
{
return name.hashCode()+age*23; //乘以一个整数23防止重复的对象,例如:a的哈希值30+年龄10=40,b的哈希值22+年龄18=40
}
public boolean equals(Object o) //重写equals类
{
if(!(o instanceof Student))
return false;
Student s = (Student)o;
return this.name.equals(s.name)&&this.age==s.age;
};
public int getAge(){return age;}
public String getName(){return name;}
}  

class Person //定义需要使用测试的类
{
private int age;
private String name;
Person(){}
Person(int age,String name)
{
this.age = age;
this.name = name;
}
public int getAge(){return age;}
public String getName(){return name;}
public boolean equals(Object o) //重写equals类
{
if(!(o instanceof Person))
return false;
Person p = (Person)o;
return this.name.equals(p.name)&&this.age==p.age;
};
}

class Pig //定义需要使用测试的类
{
private int age ;
private String name ;
Pig(int age,String name)
{
this.age = age;
this.name = name;
}
public boolean equals(Object o) //重写equals类
{
if(!(o instanceof Pig))
return false;
Pig s = (Pig)o;
return this.name.equals(s.name)&&this.age==s.age;
};
public int getAge(){return age;}
public String getName(){return name;}
}
public class CollectionDemo
{
public static void main(String args[])
{
//treeSet();
//hashSet();
//arrayList();
//linkedList();
treeMap();
}
public static void treeSet()
{
long starTime = System.currentTimeMillis();
TreeSet<Student> t = new TreeSet<Student>(new Comp());
sop(t.add(new Student(18,"k1"))); //将指定的元素添加到此集合中。
sop(t.add(new Student(11,"k3")));
sop(t.add(new Student(12,"k5")));
sop(t.add(new Student(14,"k2")));
sop(t.add(new Student(15,"k4")));
for(Iterator<Student> it = t.iterator();it.hasNext();) //遍历集合
{
Student s = it.next();
sop(s.getAge()+"--"+s.getName());
}
sop(t.remove(new Student(18,"k1"))); //将指定的元素从此集合中删除。
sop("集合是否为空:"+t.isEmpty());
long endTime = System.currentTimeMillis();
sop("TreeSet所用时间:"+(endTime-starTime)); //测试程序所花的时间
}
public static void hashSet()
{
long starTime = System.currentTimeMillis();
HashSet<Student> hs = new HashSet<Student>();
hs.add(new Student(13,"k4")); //将指定的元素添加到此 set(如果该元素尚未存在于 set 中)。
hs.add(new Student(11,"k1"));
hs.add(new Student(12,"k5"));
hs.add(new Student(14,"k2"));
hs.add(new Student(15,"k4"));
for(Iterator<Student> it = hs.iterator();it.hasNext();)
{
Student s = it.next();
sop(s.getAge()+"--"+s.getName());
}
sop(hs.remove(new Student(11,"k1"))); //将指定的元素从此集合中删除。
sop("集合是否为空:"+hs.isEmpty());
long endTime = System.currentTimeMillis();
sop("HashSet所用时间:"+(endTime-starTime));
}
public static void arrayList()
{
ArrayList<Person> al = new ArrayList<Person>();
//al.add(null);
al.add(new Person(21,"老大"));
al.add(new Person(19,"老二"));
al.add(new Person(12,"老四"));
al.add(new Person(16,"老三"));
al.add(new Person(16,"老三"));
sop("contains:"+al.contains(new Person(16,"老三")));
sop("remove:"+al.remove(new Person(16,"老三")));
for(Iterator<Person> it = al.iterator();it.hasNext();)
{
Person p = it.next();
sop(p.getAge()+"----"+p.getName());
}
}
public static void linkedList()
{
LinkedList<Person> ll  = new LinkedList<Person>();
//ll.add(null);
ll.add(new Person(21,"老大"));
ll.add(new Person(19,"老二"));
ll.add(new Person(12,"老四"));
ll.add(new Person(16,"老三"));
ll.add(new Person(16,"老三"));
sop(ll.contains(new Person(16,"老三"))); //打印出是否包含此元素
ll.set(4,new Person(10,"老五")); //替换指定位置的元素
for(Iterator<Person> it = ll.iterator();it.hasNext();)
{
Person p = it.next();
sop(p.getAge()+"----"+p.getName());
}
}
public static void treeMap()
{
Map <String,Pig>map = new TreeMap<String,Pig>();
map.put("01",new Pig(2,"小白"));
sop(map.put("01",new Pig(8,"小白"))); //不允许键重复,当重复时,put会返回一个老的值
map.put("02",new Pig(5,"小猪"));
sop(map.containsValue(new Pig(8,"小白"))); //判断此值是否存在
sop(map.containsKey("01")); //判断是否包含该键
/*
for(Iterator<String>it = map.keySet().iterator();it.hasNext();) 遍历集合的key
sop(it.next());
*/
//Entry是Map类的内部接口,也就是嵌套类。
for(Iterator<Map.Entry<String,Pig>> it = map.entrySet().iterator();it.hasNext();) //遍历集合的key和value
{
Map.Entry<String,Pig> me = it.next();
sop(me.getKey());
sop(me.getValue().getAge()+"---"+me.getValue().getName());
}
//使用values()遍历集合的value
/*
for(Iterator it = map.values().iterator();it.hasNext();)
{
Pig p = (Pig)it.next();
sop(p.getAge()+"----"+p.getName());
}
*/
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值