Java中的集合篇(三):Map和Set集合,以及泛型的使用

本文详细介绍了Java集合中的List接口,重点讲解了ArrayList、Vector和LinkedList的特点,以及Set接口中的HashSet、TreeSet和LinkedHashSet。接着深入探讨了Map接口,特别是HashMap的存储原理和遍历方式,并对比了HashMap与Hashtable的区别。此外,文章还阐述了泛型的概念、作用和在类、方法、接口中的使用,强调了泛型带来的类型安全和代码复用优势。
摘要由CSDN通过智能技术生成

一、List接口

 * void add(int index, E element):在指定位置添加元素(掌握)

 * E get(int index):获取指定位置上的元素(掌握)

 * E set(int index, E element):修改指定位置的元素(掌握)

 * E remove(int index):删除指定元素(掌握)

 

List三个实现类的特点:

ArrayList:底层数组,查询快,增删慢。线程不安全,效率高。

Vector:底层数组,查询快,增删慢。线程安全,效率低。

LinkedList:底层链表,查询慢,增删快。

Vector独有方法:

 *  void addElement(E obj): -- add()

 *  E elementAt(int index): -- get()

 *  boolean removeElement(Object obj): -- remove(Ojbect obj)

 *  void setElementAt(E obj, int index): -- set()

 *  E firstElement():

 *  E lastElement():

***************************************

    注意:   底层迭代器

    好处:  简化了遍历代码

TreeSet    特点:排序,唯一。

LinkedHashSet   特点:有序,唯一。

***************************************

 

二、Set接口

1.Set接口继承自Collection接口,它存储的是无序的、唯一的集合元素

2.HashSet类实现了set接口,是基于HashMap实现,存储不重复,无序值

3.HashSet是根据对象的哈希值来确定元素在集合中的存储位置的元素在插入时就确定了存储位置,  因此 :

①元素在集合中存储的位置是固定的.(无序是指输出顺序与存储顺序不一致),

②具有良好的存储和查找性能(存储速度快),

③保证元素的唯一依赖于HashCode方法和equals方法

 

4.HashSet创建方式:

   HashSet<String> set = new HashSet<String>();

 

5.HashSet常用方法:

boolean add(E e):向集合中添加元素

Int size():获取此集合的长度

Boolean remove(E e):删除集合中第一个出现的指定元素

 

6.HashSet遍历集合元素:     没有get方案所以没有for循环遍历方式

①第一种遍历方式--foreach循环:

For(String str:set){

System.Out.println(str);

}

②第二种遍历方式--迭代器:

lterator <String> it = set.iterator();

While(it.hashNext()){

System.Out.println(it.next());

}

 

三、Map接口

1.Map接口是一个根接口,它存储的是键值(key-value),其中key不允许重复value允许重复。

2.hashmap类实现了map接口存储的是无序的键-值对(key-value)

(1)HashMap的key是用来set集合来存放的,所以想做到key不允许重复,key对应的类需要重写hashcode和equals方法。

(2)HashMap是线程不安全的

(3)HashMap中元素的位置是不定时更新的,即元素位置是不固定的

 

3.HasMap类创建方式:

 HashMap<String,String> map = new HashMap<String,String>();

     尖括号里面存储的类,就是集合里面所要存储的类型

 

4.Map的常用方法:

V put(K key,V value)将指定的键与之关联的值存入HashMap中

V get(K key)获取指定键所关联的值   通过K找V

V remove(K key)删除

 

5.Map接口中的方法:

*  添加功能:   V put(K key, V value):当键第一次存储返回null,接下来每一次存储返回上一次的值。

*  删除功能:   void clear()   清空集合

*       V remove(Object key):根据键删除键值对,返回值。

 

*  获取功能:

*      Set<Map.Entry<K,V>> entrySet():得到的是每一组键值对,存放在一个Set集合中。

*      Set<K> keySet():得到所有的键

*      Collection<V> values():得到所有的值

*      V get(Object key):根据键得到值。

*      int size():获取集合中总共几对元素。

 

*  判断功能:

*      boolean containsKey(Object key):是否包含指定的key

*      boolean containsValue(Object value):是否包含指定的value

*      boolean isEmpty():集合是否为空

 

6.HashMap的遍历方式:

1.得到所有的键存放在Set集合中 -- keySet()  

 *  2.遍历键所在的集合,得到每一个键    

 *  3.通过当前的键得到对应的值

语法:

    Set<泛型> keys = 集合名.keySet();

    for(泛型 key: keys){

        值的数据类型 value = 集合名.get(key);

    }

例子:

Iteror<String> it2=map.keySet().itertor();

While(it2.hashNext()){

String key = it2.next();

String value = map.get(key);

Ststem.Out.println(key+”:”+value);

}

 

7.Map遍历第二种方式:

 *  1.拿到每一个键值对存储在集合中

 *  2.遍历键值对所在的集合,拿到每一组键值对

 *  3.通过该键值对,获取键,获取值

 Map<String, String> map = new HashMap<String, String>();

    Set<Map.Entry<String, String>> entrys = map.entrySet();

        for(Map.Entry<String, String> entry:entrys){

            //K getKey():返回与此项对应的键。

            //V getValue():返回与此项对应的值。

            String key = entry.getKey();

            String value = entry.getValue();

            System.out.println(key+"  "+value);

        }

 

8. collection和Map的区别?

    *  collection每次存储一个元素,Set集合是不可重复,List集合是可重复。

    *  Map集合每次存储两个元素,键不可重复,值可重复。

 

9.HashMap:使用HashMap集合存储键值对,自定义对象作为键,需要在类中覆盖hashCode()和equals()方法。

 

10.HashMap和Hashtable的区别?

 *  HashMap可以存储null键和null值,线程不安全,效率高

 *  Hashtable不可以存储null键和null值,线程安全,效率低

 

四、泛型

1.泛型,即”参数化类型”就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(‘可以称之为类型形参’)然后再使用/调用时传入具体的类型(类型实参)

2.泛型把类型明确的工作推迟到创建对象或调用方法时才去明确的特殊的类型。

3.为什么使用泛型? 作用

(1).适用于多种数据类型,执行相同的代码(代码复用)

(2).泛型中的类型在使用时指定,不需要强制类型转换(类型安全编译器会检查类型)

 

4.泛型

* 泛型:创建集合是明确集合中存储的数据类型。

* 语法:(掌握)

*  <引用数据类型>

*

* 泛型好处:

*  1.避免了强制类型转换

*  2.将运行时期错误提前到编译时期

*  3.解决了黄色警告线

 

泛型可以应用在类、方法、接口。   

用法:在main里调用

应用在类语法:public class 类名<泛型>{}

应用在方法上:public <泛型> 返回值类型 方法名(泛型 e){}

应用在接口上:interface 接口名<泛型>{}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值