栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021/11/22

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021/11/22

双向链表结构:pre   data    next
linkedList没有初始化容量,最初这个集合中没有任何元素,first和last都是null;
不管是linkedList还是ArrayList,以后写代码时不需要关心具体是哪个集合,因为我们是面向接口编程,调用的方法都是接口的方法;

Vector:
1、底层也是一个数组;
2、初始化容量:10;
3、怎么扩容:扩容之后是原容量的2倍;
4、ArrayList扩容特点:扩容特点是原容量的1.5倍;
5、Vector中所有的方法都是线程同步的,都带有synchronized关键字,是线程安全的。效率比较低,使用较少了;
6、怎么将一个线程不安全的ArrayList集合转换成线程安全的呢?
使用集合工具类:java.util.Collections;
java.util.Collection; 是集合接口
java.util.Collections; 是集合工具类

ArrayList list = new ArrayList<>();
Collections.synchronizedList(list);
list.add(1);
list.add(2);

泛型:
JDK5.0新特性
只在编译阶段起作用,给编译器参考的。(运行阶段泛型没用)
ArrayList strings = new ArrayList<>();//使用泛型之后,表示list集合中只运行存储string类型的数据;
Iterator iterator = strings.iterator();//表示这个迭代器迭代的都是string类型的;
泛型的好处:
1、集合中存储的元素类型统一了;
2、从集合中取出的元素类型是泛型指定的类型,不需要进行大量的"向下转型";
缺点:
导致集合中存储的元素缺乏多样性

JDK8之后引用了:自动类型推断机制(又被称为钻石表达式)
List list=new ArrayList<>();//后面的<>里面的类型可以省略,编译器会自动推断出来;

自定义泛型
自定义泛型的时候,<>中的是一个标识符,随便写;
java源代码中经常出现的是E(element)和T(type)
public class Test {
    public static void main(String[] args) {
        Test test = new Test<>();
        test.dosome(100);//只能使用Integer类型;
        Test test2 = new Test<>();
        test2.dosome("abc");//只能使用string类型
        Test test2 = new Test();//不用泛型里面就相当于object;
    }

    public void dosome(HJS hjs){

    }
}       

foreach
JDK5.0以后推出了新特性:增强for循环,或叫做foreach
for(元素类型 变量名:数组或集合){

}
int[] arr={1,2,3,4,5};
        for (int data:arr) {
            System.out.println(data);
        }
foreach缺点:没有下标,在需要使用元素下标的集合中不建议使用;

HashSet集合特点:
1、存储时顺序和取出的顺序不同;
2、不可重复;
3、放到HashSet集合中的元素实际上是放到HashMap集合的key部分了;

TreeSet集合特点:
1、无序不可重复,但是存储的元素可以自动按照大小顺序排序;称为:可排序集合;
2、这里的无序指:存进去的顺序和取出来的顺序不同且没有下标;

Map
java.util.Map接口中常用的方法:
1、Map和Collection没有继承关系;
2、Map集合以key和value的方式存储数据:键值对
key和value都是引用数据类型;
key和value都是存储对象的内存地址;
key起到主导的地位,value是key的一个附属品;
3、Map集合常用方法:
void clear();清空Map集合
boolean ContainsKey(Object key);判断Map中是否包含某个key//contains底层都是调用equals方法进行比对的,所以自定义类型都需要重写equals方法;
boolean ContainsValue(Object value);判断Map中是否包含某个value
V get(Object key);通过key获取value
boolean isEmpty();判断Map中集合个数是否为0
Set keySet();获取Map集合中所有的key
v put(k key,v value);向Map集合中添加键值对
v remove(Object key);通过key删除键值对
int size();获取map集合中键值对的个数
Collection values();获取map集合中所有的value,返回一个collection
Set> entrySet();将map集合转换成set集合;//类型为Map.Entry
1=2
2=2
3=2

Map集合的遍历
1、获取所有的key,通过遍历key,来遍历value;
HashMap map = new HashMap<>();
        map.put(1,7);
        map.put(2,8);
        map.put(3,9);
        Set set = map.keySet();
        for (Object o:set) {
            System.out.println(map.get(o));
        }
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(map.get(iterator.next()));
}

2、Set> entrySet();
Set> entrySet = map.entrySet();
        for (Object o:entrySet) {
            System.out.println(o);//1=2,获取的是set集合中的值
        }
        Iterator> iterator = entrySet.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next().getKey());//System.out.println(iterator.next().getValue());//不能将这两句放到同一个循环中,不然一次会获取两次next();
        }


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号