实训线上java框架学习笔记

java集合概述

与数组的区别:
1、数组长度是固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)
2、集合:JAVA集合可以存储数量不等的多个对象,还可用于保存具有映射关系的关联数组
3、)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,数组则不适用。

在这里插入图片描述
Collection接口的方法
在这里插入图片描述

Java集合可分为List Set Map Queue四大体系。

1、List接口
有序,可重复的集合,list接口是以数组为底层实现,是有序的
在这里插入图片描述
List往下还有个AbstractList它的具体实现类:

一、ArrayList 连续的可变长度的数组(有序,可重复)

ArrayList list = new ArrayList();//容纳性不强,这里可以用多态
//比如
List list = new ArrayList();

//泛型 指定容器类型 Integer String...
List<Integer> intlist = new ArrayList<Integer>();//可变长度数组(Integer)

常用方法:
在这里插入图片描述

二、LinkedList 链表存储(非连续的,非顺序的)

List<Integer> intlist = new LinkedList<Integer>();

常用方法:
在这里插入图片描述

ArrayList执行查询操作效率比较高。
LinkedList插入、删除操作效率比较高。
三、遍历方法:

List<person> personList = new ArrayList<persion>();
//获取迭代器
Iterator<person> iterator = personList.iterator()

hasNext():判断是否存在另一个可访问的元素
next():返回要访问的下一个元素
增强for循环

2、Set接口 操作数据的方法与List类似,Set接口不存在get()方法。
无序、不可重复的集合,set又是以map为底层实现
在这里插入图片描述
Set下也有一个AbstractSet它的实现类
一、HashSet(HashSet允许集合元素值为null)
1、怎样判断元素是否重复?
重写实体类的equals()方法,和hashcode方法(就是比较的地址)
2、什么是hashcode方法
hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
二、TreeSet(二叉树)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
迭代器:Iterator接口表示对集合进行迭代的迭代器,专门实现集合的遍历。
三、Set容器的遍历
hasNext():判断是否存在另一个可访问的元素
next():返回要访问的下一个元素
注意一点:set 没有get位置(方法)

Map接口
具有映射关系的集合,key-value(键值对),map接口底层是hash函数,无顺序(不是随机)
在这里插入图片描述
HashMap是Map接口中最常见的实现类
存储一组成对的键-值对象,提供key(键)到value(值)的映射,通过key来索引。
特点:
1、key不允许重复(底层使用的set)
2、value允许重复 (底层使用的collection)
3、添加的对象将转换成Object类型
还有实现类:
LinkedHashMap
TreeMap
HashTable(不在使用)线程安全的容器
properties子类,做键值对文件读取

常用方法:
红色标记的为常用方法
遍历方式:
1、keyset方法

Set<Integer> keySet = map.keySet();//取出所有key
for(Integer tmp : keySet){
    Object value = map.get(tmp) //tmp map容器的key
}

2、map特性(通常用的方法)

Person p1 = new Person();//person类有age 和 name 属性
p1.getAge(20);
p1.getName("zhangsan");

//实体类---->map容器
Map<String,Object> perMap = new HashMap<String,Object>();
perMap.put("age",20);    //key="age"
perMap.put("name","zahngsan"); //key2="name"

//遍历(已知key且数量少)
int age = perMap.get("age");
String name = perMap.get("name");

3、values()方法。

Collection<Object> value = perMap.getValues();//获取所有的value
//Collection接口继承了迭代器
Iterator<Object> iterator = values.Iterator();
while(iterator.hasNext){
    Object v = iterator.next;
   }

4、entrySet方法把map中的每个键值对封装到set容器

//返回Entry类型的键值对
Set<Map.Entry<String,Object>> entrySet = perMap.entrySet();
Iterator<perMap.Entry<String,Object>> iterator = entrySet.iterator();
while(iterator.hasNext){
   Map.Entry<String,Object> map = iterator.next;
   Object tmpobject = map.getValue();
   String key = map.getKey();
}

TreeMap
TreeMap存储Key-Value 对时,需要根据Key 对key-value 对进行排序。TreeMap可以保证所有的Key-Value 对处于有序状态。
key排序:
1、自然排序
2、定制排序

//创建一个TreeMap
new TreeMap();
Map<Integer,Object> treemap = new TreeMap<Integer,Object>();
treemap.put(3,"a");
treemap.put(7,"b");
treemap.put(1,"c");
for(Integer key:treemap.keySet()){
    System.out.println(treemap.get(key));
}
/*输出结果 自然排序
*   c
*   a
*   b
*/

操作集合的工具类:Collections
在这里插入图片描述
在这里插入图片描述

泛型

一、作用
1、解决元素存储的安全性问题
2、解决获取数据元素时,需要类型强转的问题
在集合中没有泛型时,你存储的是一个String类型,但是集合就把它当成Object类型
二、泛型的声明
interface List 和 class Test<K,V>其中T,K,V不代表值,而是代表类型,这里使用任意字母都可以,常用T表示,是Type的缩写。
三、泛型的实例化
一定要在类名后面指定类型参数的值(类型)如:

List<String> strList = new ArrayList<String>();
Iterator<Customer> iterator = customers.iterator();

三、在集合中使用泛型
List i = new ArrayList();
四、泛型类

/*泛型类
*格式:
*class 类名<字母列表“T”“K”>{
*    修饰符 字母 属性;
*    修饰符 字母T 方法(字母T t)}
*
*/

public class Order<T>{
    //构造
    public Order(T xxxx){ //T是传递的类型  变量xxxx
    }
    public Order(){ //无参构造
    }
    
    //属性
    private T t;
    public T getT(){
        return t;
    }
    public void setT(T t){
       this.t = t;
    }
    
    //泛型方法 不在使用T,另外一个
    public <E> E getOrder<E e>{
        return e;
    }
}
//数组E 到集合 List<E> 的复制
//返回  List<E>类型  
//<E>泛型声明
public <E> List<E> copyArrayToList(E[] e,List<E> list){
    for(E temp:e){
        list.add(temp);
    }
    return list;
}
//泛型接口 模拟dao层接口:处理业务的业务的增删改查。add(Person) del(int) get(person)
//add(Student) del(int) get(Student)
public interface Dao<T>{
     void add(T t);
     int del(int id);
     List<T> getList();
}
//通配符 泛型中的使用
//
public void show(list<?> list){}

//list中放置的必须是number或者number的子类
public void show1(list<? extends Number> list){}

//list中放置的是Integer或者它的父类
public void show2(list<? super Integer> list){}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值