集合框架和泛型

学习目标和方式

目标:
1.会使用集合存储数据
2.允许有存储重复的元素
3.掌握每种集合的特性

方式:
1.学习顶层:学习顶层接口/抽象类中的共性方法,所有的子类都可以使用
2.使用底层:底层不是接口就是抽象类,无法创建对象使用,需要使用底层的子类创建对象使用

集合框架

Collection接口:
定义的是所有单列集合中共性的方法;
所有单列集合都可以使用共性的方法;
没有带索引的方法;
(包括List接口和Set接口)

(一)List接口:
特点:
1.有序的集合(存储和取出元素顺序相同)
2.允许存储重复的元素
3.有索引,可以使用普通的for循环遍历
带索引的方法有(增删改查):
add()\remove()\get(index)\set(index)
list集合的三种遍历方式:
1.普通for循环遍历,代码略
2.迭代器遍历

 Iterator itr=newsList.iterator();
       while(itr.hasNext()){
            System.out.println(itr.next());
        }

3.使用增强for遍历

        for (Object obj:newsList){
            System.out.println(obj);
        }

List接口包含的集合有:
1.Vector集合
2.ArrayList集合:底层是可变数组,底层是可变数组,遍历元素更快,改变值也就越快
3.LinkList:底层是底层是双向列表,插入,删除更快

(二)Set接口:
特点:
1.不允许存储重复元素
2.没有索引(不能使用普通的for循环遍历)
3.无序的集合(存储和去除元素的顺序可能不一致)
带索引的方法只有增和删.
Set集合的遍历方式:
1.增强for(代码同上)
2.迭代器(代码同上)
Set接口中包含的集合有:
1.TreeSet集合
2.HashSet集合(底层是HashMap的键,使用键的hash值来保证唯一性)(其中LinkedHashSet集合是有序的集合)

Map结构的集合类(实现–对应)(主要讲HashMap)
带索引的方法(增删改查):
map.put(key,value)增\map.get(key)查\map.remove(key)删\map.replace(key,value)改(map.put()也可以用来改)
遍历方式:
1.使用entrySet方法获取键值对的集合

Set entry=map.entrySet();
        for (Object o : entry) {
            System.out.println(o);
        }

2.遍历key的方式

Set keys=map.keySet();
        for (Object key : keys) {
            System.out.println(key+":"+map.get(key));
        }

3.遍历value的方式

Collection values=map.values();
        for (Object value : values) {
            System.out.println(value);
            System.out.println(map);
        }

4.直接遍历

 System.out.println(map);

包含的集合有:
1.HashMap
2.HashTable:所有数据都上锁,如果一个线程访问了某段数据,其他人都不能访问所有数据

如何选用集合类?
1.要求线程安全,使用Vector、Hashtable
2.不要求线程安全,使用ArrayList,LinkedList,HashMap
3.要求key和value键值,则使用HashMap,Hashtable
4.数据量很大,又要线程安全,则使用Vector

泛型

概念:泛型是一个未知的数据类型

E :Element 元素(所有java本有类+接口)
T :Type 类型等(所有类+所有接口)
K : 键
V : 值

使用泛型和不使用泛型的区别:
(一)不适用泛型:
好处:集合不使用泛型,默认类型是Object类型,可以存储任意类型
弊端:不安全,会引发类型转换异常
(二)使用泛型:
好处:避免的转换的麻烦,存储什么类型,取出什么类型;把运行期异常提醒到编译器
弊端:泛型是什么类型只能存储什么类型

泛型的定义和使用
泛型类
定义格式:修饰符 class 类名<泛型>{}

泛型方法
定义格式:修饰符 <泛型> 返回值类型 方法名(参数(使用泛型)){}

泛型接口
第一种方法:定义接口的实现类,实现接口,指定接口的泛型
第二种方法:定义接口的实现类,接口是什么类型,指定实现类也是相同的接口,类跟着接口走,相当于确定了一个泛型类

泛型的通配符
泛型的通配符:?,代表任意数据类型
使用方式:不能通过创建对象使用;只能作为方法的参数使用

泛型的限定
泛型上限限定:? extend E,表示使用的泛型只能是E类的子类或者本身
泛型下限限定:? super E,表示使用的泛型只能是E类的父类或者本身

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值