Java集合学习(适合新手)

集合框架

由⼀组类和接⼝组成的⼀个体系。

Collection 集合框架

最基本的接⼝,⼀个 Collection 可以存储⼀组⽆序、不唯⼀的对象,实际开发中不会直接使⽤ Collection 进⾏开发。

List 是 Collection 的⼀个⼦接⼝,存储⼀组有序、不唯⼀的对象,集合框架中最常⽤的接⼝之⼀。
List  接口的实现类 :ArrayList、LinkedList
Set  是 Collection 的⼀个⼦接⼝,存储⼀组⽆序、唯⼀的对象。
Set 接口的实现类:TreeSet、HashSet、LinkedHashSet
Map 独⽴于 Collection 的另外⼀个接⼝,存储⼀组键值对象(key-value),通过键到值的映射。
Map 接口的实现类:HashMap、TreeMap、Hashtable
Iterator ⽤来输出集合元素的接⼝,⼀般适⽤于⽆序集合。
//获取集合的迭代器  将集合内的元素输出
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}

 

Enumeration 更能与 Iterator ⼀样,已经被 Iterator 所取代。
SortedSet Set 的⼦接⼝,可以对 Set 集合中的元素进⾏排序。
SortedMap Map 的⼦接⼝,可以对 Map 集合中的元素进⾏排序。
Queue 队列接⼝,此接⼝可以实现对列操作。
Map.Entry Map 内部的接⼝,描述 Map 中的⼀个键值对元素。
 

Collection 常⽤的⽅法

int size() 返回集合的⻓度
boolean isEmpty() 判断集合是否为空
boolean contains(Object o) 判断集合中是否存在 o
Iterator iterator() 返回迭代器Object[] toArray() 将集合转为数组
boolean add(Object o) 向集合中添加元素
boolean remove(Object o) 从集合中删除 o
boolean remove(int index) 从集合中删除下标是 index 的元素
System.out.println(list.size());//输出list集合的长度

        System.out.println(list.isEmpty());//判断list集合是否为空

        System.out.println(list.contains(1));//判断list集合是否包含元素 1

        Object[] array = list.toArray();//将一个集合  转成一个数组
        System.out.println(array);

        list.remove(1);//删除下标为1的元素
        list.remove("java");//删除集合中的java元素
        System.out.println(list);
        System.out.println("##########################");
       

 

Vector 是⼀个早期的 List 的实现类,⽤法基本与 ArrayList ⼀致。
Stack 是⼀个栈的数据结构的实现,栈的特点是“后进先出”,“先进后出”。
  ♦ push 将数据压如到栈中。
  ♦ peek 取出栈顶元素,以复制的形式。
  ♦ pop 取出/移除栈顶元素。
LinkedList 实现了⼀个“先进先出”的队列,不但要保存⾃⼰的数据,同时要保存前驱节点、后继节点的
位置信息,所有需要更多的内存空间。
 //list 实现的一个先进先出的队列
        LinkedList list1=new LinkedList();
        list1.add("How");
        list1.add("are");
        list1.add("you");
        System.out.println(list1);

 

ist.offer("JavaSE");
System.out.println(list);
list.add(1,"List");
System.out.println(list);
System.out.println(list.getLast());
System.out.println(list.get(1));

 

栈和队列的区别

Stack stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
for(int i=0;i<5;i++){
System.out.println(stack.pop());
}
System.out.println("****************");
LinkedList list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
for(int i=0;i<5;i++){
System.out.println(list.pop());
}

 

Queue 队列,要求存⼊的数据必须是有序的,所以如果要存⼊⾃定义数据类型,则需要实现
Comparable 接⼝,⾃定义的类就具备了排序的功能。
public class User implements Comparable {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
/**
* 0 表示相等
* 1 表示this⽐o⼤
* -1 表示this⽐o⼩
* @param o
* @return
*/
@Override
public int compareTo(Object o) {
User user = (User) o;
if(this.id<user.id){
return 1;
}
if(this.id>user.id){
return -1;
}
if(this.id == user.id){
return 0;
}
return 0;
}
}Queue queue = new PriorityQueue();
User user = new User(1,"张三");
User user1 = new User(2,"李四");
queue.add(user);
queue.add(user1);
System.out.println(queue);

 

Set 集合框架

Set 是 Collection 另外⼀个常⽤的⼦接⼝,Set 接⼝以散列的形式来存储数据,元素没有顺序(1、不能
通过下标取出元素,2、遍历集合,元素的输出是随机的)可以存储⼀组唯⼀、⽆序的数据。
实际开发中,不能直接实例化 Set。
HashSet、LinkedHashSet、TreeSet
HashSet 存储⼀组⽆序且唯⼀的数据,⽆序是指存⼊的顺序和取出的顺序没有关系。
Set set = new HashSet();
set.add("Java");
set.add("Hello");
set.add("World");
System.out.println(set.size());
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
set.remove("Hello");
iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
LinkedHashSet 存储⼀组有序且唯⼀的数据,这⾥的有序不是说可以通过下标取数据,LinkedHashSet
依然没有下标概念,这⾥的有序是指存⼊的顺序和取出的顺序⼀致。Set set = new LinkedHashSet();
set.add("Java");
set.add("Hello");
set.add("World");
set.add("JavaSE");
set.add("JavaME");
set.add("JavaEE");
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}

 

LinkedHashSet 判断两个对象是否相等:
1、判断 hashcode 是否相等,如果不相等,就认为是两个对象不相等。
如果 hashcode 相等,再来执⾏判断 2。
2、通过 equals ⽅法判断是否相等。
TreeSet 保存⼀组有序且唯⼀的数据,这⾥的有序是指集合内部会⾃动给所有的元素进⾏升序排列,⽆
论按照什么样的顺序存⼊数据,输出的时候⼀定是按照升序进⾏输出。
HashSet:存⼊的顺序和输出顺序没有关联,输出是随机的。
LinkedHashSet:存⼊顺序和输出顺序⼀致。
TreeSet:⽆论什么顺序存⼊,输出⼀定是升序。
Set set = new TreeSet();
People people = new People(1,"张三");
People people1 = new People(2,"李四");
People people2 = new People(3,"王五");
set.add(people);
set.add(people1);
set.add(people2);
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
public class People implements Comparable {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public People(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "People{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
@Overridepublic int compareTo(Object o) {
People people = (People) o;
int num = 0;
if(this.id>people.id){
num = 1;
}
if(this.id<people.id){
num = -1;
}
return num;
}
}

Map集合框架

Map 是完全独⽴于 Collection 的另外⼀套体系,Set、List、Collection 只能操作单个元素,每⼀次的存
取操作只能针对⼀个元素,Map 可以操作⼀对元素,key-value 的映射。
K:key
V:value

常⽤⽅法:

int size() 获取集合的⻓度
boolean isEmpty() 判断集合是否为空
boolean containsKey(Object key) 判断集合中是否存在某个 key 值
boolean containsValue(Object value) 判断集合是否存在某个 value
V get(Object key) 取出集合中 key 对应的 value
V put(Object key,Object value) 向集合存储⼀组 key-value 值
V remove(Object key) 删除集合中 key 对应的 value
void clear() 清空集合
Set keySet() 取出集合中所有的 key,组成⼀个 Set 返回
Collection values() 取出集合中所有的 value,组成⼀个 Collection 返回
HashMap:存储⼀组⽆序,key 不可重复,value 可重复的元素。
Hashtable:存储⼀组⽆序,key 不可重复,value 可重复的元素。
TreeMap:存储⼀组有序(key),key 不可重复,value 可重复的元素。
Map map = new HashMap();
map.put("h","Hello");
map.put("w","World");
map.put("j","Java");
map.put("s","JavaSE");
map.put("m","JavaME");
map.put("e","JavaEE");
System.out.println(map);
map.remove("m");
System.out.println(map);
map.put("jj","Java");
System.out.println(map);
System.out.println(map.containsKey("jj"));
System.out.println(map.containsValue("Java"));
Set keys = map.keySet();
System.out.println(keys);
//遍历
Iterator iterator = keys.iterator();
while(iterator.hasNext()){
String key = (String) iterator.next();
System.out.println(key+"-"+map.get(key));
}
Collection values = map.values();
for(Object value:values){
System.out.println(value);
}

 

HashMap 和 Hashtable ⽤法⼀样,Hashtable 较早推出的⼀个 API(Application Interface) 应⽤程序接
⼝,Hashtable 是线程安全的,但是性能较低,HashMap 线程不安全,但是性能更⾼。
Map map = new Hashtable();
map.put("h","Hello");
map.put("w","World");
map.put("j","Java");
map.put("s","JavaSE");
map.put("m","JavaME");
map.put("e","JavaEE");
System.out.println(map);
map.remove("m");
System.out.println(map);
map.put("jj","Java");
System.out.println(map);
System.out.println(map.containsKey("jj"));
System.out.println(map.containsValue("Java"));
Set keys = map.keySet();
System.out.println(keys);
//遍历Iterator iterator = keys.iterator();
while(iterator.hasNext()){
String key = (String) iterator.next();
System.out.println(key+"-"+map.get(key));
}
Collection values = map.values();
for(Object value:values){
System.out.println(value);
}

 

TreeMap 可以按照 key 值对数据进⾏排序。

public class Pet implements Comparable {
private int age;
public Pet(int age) {
this.age = age;
}
@Override
public int compareTo(Object o) {
Pet pet = (Pet) o;
if(this.age>pet.age){
return 1;
}
if(this.age<pet.age){
return -1;
}
return 0;
}
@Override
public String toString() {
return "Pet{" +
"age=" + age +
'}';
}
}
Map map = new TreeMap();
Pet pet1 = new Pet(1);
map.put(pet1,"Hello");
Pet pet2 = new Pet(2);map.put(pet2,"World");
Pet pet3 = new Pet(3);
map.put(pet3,"Java");
Pet pet4 = new Pet(4);
map.put(pet4,"JavaSE");
Pet pet5 = new Pet(5);
map.put(pet5,"JavaME");
Pet pet6 = new Pet(6);
map.put(pet6,"JavaEE");
System.out.println(map);

 

转载于:https://www.cnblogs.com/199600xcl/p/11271426.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值