2022.01.04-JAVASE结束-从Stringbuffer类开始-到Collection结束

接上篇
小不忍则乱大谋
68.StringBuffer类–提升版String-----自动扩容
底层为new char[16]
如果直接new Stringbuffer
69.StringBuffer类方法
增删改查
增:append();
删: delete(2,5)
[ )
改:setcharAt()
replace(0,5,str)
[ )
查:charat()
插:insert(5,str)
长:length
遍历:toString
反转:reverse

70.时期日期的API
CurrentTimes

SimpleDateForamt

71.比较器(重要)
1.Comparable 接口
继承
重写

2.Comparator
Comparator com=new Comparator(){
@overwrite
	重写比较方法
}

72.穷举类ーーenmu
enmu Season{
Sping,vacation,FREE

重写
toString(){
}
}

73.enmu的常用方法
values()
value of()

74.枚举类分别可以进行不同方法设置
Winter{

}

使用时:
	Switch(Season){
			case Winter:
			}

75.注解类
1.Retention
表示线程的生命周期
2.Target
表示可以修饰的范围

76.Collecetion 和 Map 两种体系
集合—Collecetion

图—Map
77.集合Collcetion------------非常重点
一种包含数据的方式

分为两种大分类:

Collcetion:
List----------------有序 可重复-----动态数组
Set----------------无序 不重复-----集合

			-------------Arrarylist(线性表)
List-----------------LinkedList(链表)
			------------Vector(向量)


				-------------HashSet
Set-----------------LinkdeSet
			------------TreeSet

78.Map的分类
Map为函数对应

Key不可重
Valu可重

Key----Value
键-----值

成组添加

HashMap
Linked HashMap
TreeMap
Hashtable
Properties

79.Collection接口中的方法

add(obj e)

size()

addall(int index, )

costains()
实际上采用的是“equals方法”并不是“==”
实际上重写了“equals”

costainsAll( collection col);
------判断是不是集合col全部都存在

remove(Obj obj) ------删除内容更一样的
-------删掉了 true
-------未删除 false

removeAll(Col col1)------------重要!
---------删除col1的所有元素
----------------------------只删交集!!!!

retainAll()-------求交集
-----对coll进行了修改

equals()

hashcode()------返回当前对象哈希值

toArray()-------返回一个数组
-------添加是什么 返回什么数组
集合----》数组
{//底层实现
List list=Arrays.aslist(new String[]{“aa”,“bb”})
}

80.集合如何进行遍历?

1.迭代器模式-----------重要



代码举例:

遍历

首先Arraylist数组 coll
coll添加数据

再然后使用coll调用迭代器
a为coll.iterator

判断a.hasNext()
输出a.Next()
 Collection coll=new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add("王娇璇");
        coll.add("付梦雪");
        coll.add("Ether");

        java.util.Iterator a=coll.iterator();
        while(a.hasNext()){
            System.out.println(a.next());
        }

用于遍历,调用迭代器时候,返回-----一个迭代器的实例

重要——————————
在调用.Next()时,指针才下移
调用hasNext(),指针不动,判断是否存在Next

删除 remove()

如果里面有“Tom”
删除“Tom”

这里作为,迭代到哪一个时候和哪一个进行比较
    Collection coll=new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add("王娇璇");
        coll.add("付梦雪");
        coll.add("Ether");
        coll.add("Tom");


        java.util.Iterator a=coll.iterator();
        while(a.hasNext()){
            Object obj=a.next();
            if("Tom".equals(obj)){
                a.remove();
            }

        }

        java.util.Iterator b=coll.iterator();
        while(b.hasNext()){
            System.out.println(b.next());
        }

2.增强For-each循环------------不改变coll,只是取出赋值
	
	for(obj  :  coll)
{
	sout(obj)
	}
--------------
从coll中 
挨个 取出obj对象
输出 挨个取出的obj对象

81.List---------动态数组

1.ArrayList线性表
	自动扩容-------默认1.5倍
	首次加长------加10长度
	JDK7--------底层为饿汉式
	JDK8-------底层为懒汉式

2.LinkedList
	Node为基本元素------Value和指针(指向后继Value的数值)
	也存在双向列表

82.List接口的常见方法

add()
add(index,obj)------从索引处插入obj

indexof()-------首次出现位置
lastindexof()

remove(index)------删除索引对应的值
remove(value)-----删除与value相同的值

set(int index,obj)------索引改为obj

sublist(int start,int end)-------取出---不改变原数组

增:add
删: remove
改 set
查 get
插 add
长 size
遍历	 iterator迭代
		for each 加强For循环
		普通 for循环

83.Set接口

Hashset------------可以存null,线程不安全
					每个格子下以Linkedlist形式添加

底层-----
			初始化为16长度
			
			无序性----哈希值排序---所以无序
			不可重复性----每次添加时,equals判断,不返回true

		
add方法的底层逻辑:

哈希值定区域

无元素---添加成功

有元素---	
		原本有n个链表形成的b
													
					a和b哈希值不相同----添加成功
					a与当前位置所有进行equals----相同--失败
											不相同---成功

84.hashset 调用 add方法时候
重要----------------重写 Hashcode()和 equals() 方法

用一套规则
这样才能有效的添加判断!

85.Hashset子类-----LinkedHashset
额外加了双向链表—记录前一个和后一个的值
优点:频繁的遍历–更好用

86.Treeset----自带排序 加进去就排好序
因此:
必须同一类
必须可比较
可以按照“自然”和“定制”排序

87.Map接口----重头戏来了

怎么理解Map?
Key---value
键---值
x=f(x)==y

HashMap-----LinkedHashMap

HashMap----properties

Sorted----TreeMap



HashMap--------线程不安全 效率高  可存null的key或者value
					-----LinkedHashMap ------遍历时,可以有添加的顺序
									-------高频率遍历用

TreeMap------添加就已经排序了,红黑树

88.Map接口的结构的理解
单个为Enty(key,value)----一一对应

key-----set存----不重复

value随便

特点-----不重复 无序

重要------key所在的类---重写equal()和hashcode()---毕竟实现了set嘛

89.HashMap的底层实现原理

1.实例化----默认16长度的Enty[]
2.以map.put(key1,value1)---为例
	首先 key1.hashcode()---判断往哪里塞--Key定位置

	判断位置为空---添加成功
	不空----假如存在key2
				key1.equals(key2)?
				相同-------Key1替换key2----Value1替换value2
				不同---加
3.JDK7---------Enty[]--set存---最后也是Arraylist
  JDK8——-------Node----set存--链表+红黑树
  何时?----List>14&&表>8

90.HashMap源码--------重要!!!!
JDK7-----
加载因子
临界值
Put方法
JDK8-----
加载因子
被树化表最小容量

91.LinkedHashMap的底层源码
按照添加顺序进行排序

92.Map接口的方法
以HashMap为例

    Map map=new HashMap<>();
         //add
        map.put("A",87);
        map.put("B",87);
        map.put("C",87);
        map.put("D",87);

        //修改
        map.put("A",120);
        //remove
        Object value=map.remove("D");
        //clear
        map.clear();
        //


        map.put("A",87);
        map.put("B",87);
        map.put("C",87);
        map.put("D",87);

        //get()

        //sonstainskey

        //constainsvalue
        
		put ----加入或者修改
		remove------形参key---返值value
		clear----输出空{}

		查询 
			get------key-value
			
			containskey
			containsvalue
			
			size
			
			isEmpty
			
			equals
	   遍历
	   	key  value  key-value
		
		set keyset()-----key用set存的
				--变为对set的遍历
		value-----Collection存的
				--一般遍历
	
	key-value 怎么遍历?
	Entry---用set存的
			--set遍历

	或者
			先调key---key一一对应value

93.TreeMap-
1.也是key-value
2.key必须为同一类
3.key必须可比较----继承or重写com

怎么遍历?
	map.entryset()---entry用set存的
	While(hasNext();){
}

94.Collections大类(工具类)
同ArrayLists

reverse()----反转

shaffle---随机

sort----排序咯

swap(list,i,j)----交换

max()

min()

frequencey()----出现次数

copy()
		----List dest=Array.alist(new object[List.size()])

replaceAll()

这相当于高强度的复习了,真的是温故而知新啊!

上一篇:各数据库千万级数据构造


下一篇:【计题01组04号】算法学习计划