| 文章 | 链接 |
|---|---|
| Java语法 | https://blog.csdn.net/weixin_45606067/article/details/107049186 |
| 一维数组与二维数组、内存解析 | https://blog.csdn.net/weixin_45606067/article/details/107049178 |
| 面向对象(1/3)类和对象 | https://blog.csdn.net/weixin_45606067/article/details/108234276 |
| 面向对象(2/3)封装性、继承性、多态性 | https://blog.csdn.net/weixin_45606067/article/details/108234328 |
| 面向对象(3/3)抽象类、接口、内部类、代码块 | https://blog.csdn.net/weixin_45606067/article/details/108258152 |
| 异常处理 | 待更新 |
| 多线程(1/2) | https://blog.csdn.net/weixin_45606067/article/details/107067785 |
| 多线程(2/2) | https://blog.csdn.net/weixin_45606067/article/details/107067857 |
| 常用类 | https://blog.csdn.net/weixin_45606067/article/details/108283203 |
| 枚举与注解 | 待更新 |
| 集合(1/5)Collection、Iterator、增强for | https://blog.csdn.net/weixin_45606067/article/details/107046876 |
| 集合(2/5)List、ArrayList、LinkedList、Vector的底层源码 | https://blog.csdn.net/weixin_45606067/article/details/107069742 |
| 集合(3/5)set、HashSet、LinkedHashSet、TreeSet的底层源码 | |
| 集合(4/5)Map、HashMap底层原理分析 | https://blog.csdn.net/weixin_45606067/article/details/107042949 |
| 集合(5/5)LinkHashMap、TreeMap、Properties、Collections工具类 | https://blog.csdn.net/weixin_45606067/article/details/107069691 |
| 泛型与File | https://blog.csdn.net/weixin_45606067/article/details/107124099 |
| IO流与网络编程 | https://blog.csdn.net/weixin_45606067/article/details/107143670 |
| 反射机制 | 待更新 |
| Java8新特性 | https://blog.csdn.net/weixin_45606067/article/details/107280823 |
| Java9/10/11新特性 | 待更新 |
一、LinkedHashMap底层实现原理
HashMap中的内部类:Node
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
}
LinkedHashMap中的内部类:Entry
static class Entry<K,V> extends HashMap.Node<K,V> {
Entry<K,V> before, after;
Entry(int hash, K key, V value, Node<K,V> next) {
super(hash, key, value, next);
}
}
二、TreeMap
TreeMap两种添加方式的使用:
向treemap中添加数据,要求key必须是同一个类创建的对象。
因为要按照类进行排序:自然排序、定制排序。
1. 自然排序
代码实现:
@Test
public void test1(){
TreeMap map = new TreeMap();
User user1 = new User("tom", 23);
User user2 = new User("jerry", 25);
User user3 = new User("rose", 29);
map.put(user1,"98");
map.put(user2,"89");
map.put(user3,"76");
Set set1 = map.entrySet();
Iterator iterator1 = set1.iterator();
while (iterator1.hasNext()){
Object obj = iterator1.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() +"--->"+entry.getValue());
}
}
class User implements Comparable{
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age &&
Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
//按照姓名从大到小排序,年龄从小到大排序,
@Override
public int compareTo(Object o) {
if (o instanceof User){
User user= (User) o;
int num= this.name.compareTo(user.name);
if (num!=0){
return -num;
}else{
return Integer.compare(this.age,user.age);
}
}else{
throw new RuntimeException("类型不一致!");
}
}
}
2. 定制排序
@Test
public void test2(){
TreeMap map = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof User && o2 instanceof User){
User u1 = (User)o1;
User u2 = (User)o2;
return Integer.compare(u1.getAge(),u2.getAge());
}
throw new RuntimeException("类型不一致!");
}
});
User user1 = new User("tom", 23);
User user2 = new User("jerry", 25);
User user3 = new User("rose", 29);
map.put(user1,"98");
map.put(user2,"89");
map.put(user3,"76");
Set set1 = map.entrySet();
Iterator iterator1 = set1.iterator();
while (iterator1.hasNext()){
Object obj = iterator1.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() +"--->"+entry.getValue());
}
}
三、Properties
Properties处理配置文件
public static void main(String[] args) {
Properties prop=new Properties();
FileInputStream fileInputStream=null;
try {
fileInputStream = new FileInputStream("jdbc.properties");
prop.load(fileInputStream);
String name=prop.getProperty("user");
System.out.println(name);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (fileInputStream!=null){
fileInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、Collections 工具类
Collections工具类:操作set,map,list等集合的工具类。
1. 工具类中常用的方法
排序操作:(均为static 方法)
- reverse(List):反转 List 中元素的顺序
- shuffle(List):对 List 集合元素进行随机排序
- sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
- sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
- swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
查找、替换
- Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
- Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
- Object min(Collection)
- Object min(Collection,Comparator)
- int frequency(Collection,Object):返回指定集合中指定元素的出现次数
- void copy(List dest,List src):将src中的内容复制到dest中
- boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值
2. 代码演示
@Test
public void test1(){
List list = new ArrayList();
list.add(123);
list.add(43);
list.add(875);
list.add(-25);
list.add(0);
Collections.reverse(list);
Collections.shuffle(list);
Collections.sort(list);
Collections.swap(list,1,2);
Collections.frequency(list,1);
List dest = Arrays.asList(new Object[list.size()]);
Collections.copy(list,dest);
//同步控制
List<Object> list1 = Collections.synchronizedList(list);//返回的list1就是线程安全的list
}
如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
版权声明:本文为weixin_45606067原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。