2024-1-29 笔记

本文详细介绍了Java集合框架的核心概念,包括集合类的作用、特点,列举了List(如ArrayList和LinkedList)、Set(如HashSet)和Map(如HashMap)的特性和使用方法,以及迭代器的原理和应用。
摘要由CSDN通过智能技术生成

**java集合知识点总结**

集合:相当于容器(Container),用于存储多个数据。不同的容器代表不同的数据结构,用于存储和管理具有特定关系的一组数据。

集合框架: 集合框架可以看作是一组容器的集合。JAVA对常用数据结构和算法进行了封装,对外提供了一套设计优良的接口和类。

集合框架的特点:

(1) 集合类本身也是一个对象,是可以存储多个元素的对象 。

(2)基本数据类型必须借助与之对应的Wrapper包装器类。

(3)集合中存放的元素都是Object类型的对象。

(4)集合类的容量可以动态增长。

Collection接口描述set和list集合类型的根接口

**List:**

(1)元素必须按顺序存放

(2)通过索引号标识元素在List中的位置,用户能够使用索引号来访问List 中的元素,索引号从0开始

(3)允许存储任意对象,且允许出现重复的对象或null空对象

ArrayList:

(1)以数组的形式对List接口提供了实现,是容量可动态增长的数组

(2)允许存储任意元素,包括重复对象和null空对象

(3)以索引号方式存取对象

(4)ArrayList是非同步的(unsynchronized),多线程并发访问时不安全

LinkedList:

(1)List接口的实现类,以双向链表的形式存储数据

(2)不支持多线程并发访问

**Set:**

(1)Collection接口的子接口,方法和Collection中的一致。

(2)Set中的元素无顺序,存储的对象不允许重复。

HashSet:

(1)Set接口的实现类,存储的对象无序,且不允许重复

(2)HashSet采用了哈希散列算法存储元素。当需要添加新的对象时,先根据该对象的hashcode()方法确定它在内存中的存放地址,如果该位置上没有其他对象,就直接存储在这个位置上;如果该位置上已经有对象了,就调用equals()方法对两个对象进行比较,相同就不允许添加,不同就以链表的方式散列到该位置其他元素的后面

(3)声明和创建、添加元素、删除、遍历

Set  set  =  new  HashSet();
String  s1  =  "hello";
String  s2  =  new String("world");
String  s3  =  new String("world");
String  s4  =  "java";
 set.add(s1);
 set.add(s2);
 set.add(s3);
 set.add(s4);
 set.remove(s1);
 //采用for循环实现对Set中元素的遍历
Object[] os = set.toArray();
for(int i=0;i<os.length;i++){
    System.out.println(os[i]);    
}
//结果:java
//     world

(4)常用方法:

public boolean add(E e)  给Set中添加一个对象e

public void clear()   删除Set中所有元素

 public Boolean remove(Object o)  删除Set中指定元素o

(5)拓展

**自定义的类**实现哈希算法

举例:

public  class  Employee{
    private int id;
    private String name;
    private double salary;
    …  …
}
//重写hashCode()方法:可自定义算法规则,确保两个对象返回的整型哈希码相同即可
//hashCode方法:返回 set 的哈希码值。
public int hashCode() {
    return (int)(id+name.hashCode()+salary);
}
//重写equals()方法
//equals方法:比较指定对象与此 set 的相等性。
public boolean equals(Object obj){
    if(this == obj)  
    return true;
    if(obj instanceof Employee){//instanceof 判断其左边对象是否为其右边类的实例
         Employee e = (Employee)obj;
        if(e.getId()==id && 
                 e.getSalary()==salary && e.getName().equals(name)){
            return true;    
        }else{
            return false;    
        }
    }else{
        return false;    
    }
}

**Map:**

(1)Map中的元素都是成对出现的,以键值对映射的形式存储和管理数据

(2)采用key——values的,不允许有重复的键,每个键最多对应一个值,即每个对象都有一个唯一的key值,每个key对应一个value ,通过key可以实现对value对象的访问,但value对象允许重复

(3)key和value都为Object对象

(4)常用实现类:HashMap、Hashtable

子接口:SortedMap-->TreeMap(实现类)

Map.Entry接口:

(1)存储键值对的映射关系, 每个Map.Entry对象代表Map中一个特定的键/值对

(2) Map接口提供了entrySet()方法返回所有的映射集合

(3)该接口中提供了方法访问映射关系两端的key与value对象

(4)常用方法:

 getKey():获取该对象的key值

 getValue():获取该对象

 setValue():修改value对象

put(objectkey,objectvalues)增加一个新的值

get(objectkey)查找key上面的值

SetkeySet()将所有的key返回到一个set中

java集合只能保存引用类型的数据,是对象的引用

(5)Map的应用

//添加元素
Map  map  =  new  HashMap();
String  s1 = “hello”;
String  s2 = “world”;
String  s3 = “Hi”;
String  s4 = new String(“java”);
map.put(new Integer(1), s1);
map.put(new Integer(2), s2);
map.put(new Integer(3), s3);
map.put(new Integer(3), s4); //重复的key,结果如何?
//删除元素
 map.remove(1);  //根据key值删除
 map.remove(s2); //根据value对象删除?
//遍历所有key
/*Object[]  keys = map.keySet().toArray();
for(int i=0;i<keys.length;i++){
    System.out.println("key: "+keys[i]);
}*/
Iterator iter1=map.keySet().iterator();
while(iter1.hasNext()){   //迭代器遍历
        System.out.println(iter1.next());
}
//遍历所有value
Iterator iter2=map.values().iterator();
while(iter2.hasNext()){   //迭代器遍历
        System.out.println(iter1.next());
}
//遍历所有映射
Iterator iter3=map. entrySet().iterator();
while(iter3.hasNext()){   //迭代器遍历
      Map.Entry entry = (Map.Entry)iter3.next();
        System.out.println(entry.getKey()+": “
            +entry.getValue());
}
//结果
key: 2
key: 3
=============================
value: world
value: java
=============================
2 : world
3 : java

(6)总结:

当添加新映射时,如果key有重复,会用新的value对象替换原来的key所对应的value。

删除对象时只能根据key值删除,不能根据value删除。

相关方法:

add如果增加重复元素,则增加失败,返回false

contains()  判断是否包含有某个元素

Collectionvalues()  将所有的值返回到一个collection集合中 

set(index,elemetn)  修改指定索引下的元素

遍历集合的方法:

(1)for循环

(2)增强for循环

(3)迭代器

迭代器:

优点:Java集合框架将数据结构和算法进行了分离,使算法独立于不同的容器类,**对不同的集合提供统一的遍历算法。**迭代器是按次序一个个获取集合中所有的对象,是目前遍历集合中元素的最简单也是最标准的处理机制。不需要索引。

迭代器的创建(不同的集合类都对该方法提供了不同的实现):

List  list  =  new  ArrayList();  
Iterator iter  =  list.iterator(); //返回与ArrayList对应的迭代器
Set  set  =  new  HashSet();  
Iterator iter  =  set.iterator(); //返回与HashSet对应的迭代器

Iterator接口中的方法:

boolean hasNext( )   判断集合中是否还存在下一个元素,有则返回true,否则返回false

Object next( )   返回下一个元素。如果没有下一个元素,则引发NoSuchElementException异常

void remove( )  删除上次访问返回的对象,如果试图在调用next( )方法之前,调用remove( )方法,则引发IllegalStateException异常

迭代器遍历Collection:

while(iter.hasNext()){  //判断集合中是否还有元素
    System.out.println(iter.next());//next方法取出下一个元素    
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值