Java学习字符串 ---集合框架

 工具类:StringBuffer和StringBuilder

StringBuffer:

格式:

StringBuffer(初始容量);

为什么要有这两个工具类:

解决拼接字符串过程中出现的中间量,从开始到结果过程中生成的量

如何解决?

字符串是以字符的数组保存,数组声明后长度就不可变化,我们使用一个可扩容的数组来保存所有的字符。

如何扩容?

默认情况下的给予16长度字符数组初始化,不断添加,如果所需要的空间>当前分配的空间。扩容的容量是原容量<2+2;如果扩容后的容量还不满足,新容量就等于最小所需容量

StringBuilder:和StringBuffer完全一样,只不StringBuilder线程不安全,StringBuffer线程安全。

StringBuffer

sychronized同步的:判断线程安不安全

StringBuffer和StringBuilder的区别:

StringBuffer和StringBuilder实现的功能解决拼接字符串过程中出现的中间量,StringBuffer线程不安全,但是速率相比较快和StringBuilder 线程安全,速率相比于慢。

最后使用

for(int i=0;i<123;i++){

strb.append(char()i)

}

2.集合框架

两个框架 Iterable下的Collection

Collection有一个超级接口 Iterable(可迭代的),集合中的所有接口都实现了Connection和Iterable。

Collection是集合(List Queue Set)的超级接口

List 列表,有序的集合 有两个集合 :

  • 1.ArrayList  通过数组实现

  • 2.LinkedList通过链表实现
List list=new ArrayList();//List是接口 ArrayList实现类
List.add("12");
list.set(0,"hello")

ArrayList  通过数组实现就要解组的两个弊端:

类型问题--Object使用Object数组来保存数据

长度---使用数组扩容解决数量问题:

默认容量是10,扩容:  原长度+原长度>2;

使用格式:

list.add("你好");/存储

list.add(12); 存的是封装类型Integer 值

list.get(0)//获取

list.remove(12);

list.set(0,"hello");

list.add ("你好");//添加一个就是下标为0
list.add (12);//
list.get(0);//通过下标取出
list.remove(12);//删除下标为12的元素 不是12这个值 注意
list.remove(Integer.valueof(12));

注意:我们在集合中放的值是这个类型的封装类型 .

    List list=new ArrayList();//将0-11的奇数存入数组,遍历集合
        for (int i = 0; i <100; i++) {
            if (i%2!=0) {
                list.add(i);
            }
        }for (int i = 0; i <list.size(); i++) {//list.size()这个方法获取长度
         System.out.println(list.get(i);
        }

list.iterator()//迭代器

列表的接口叫list 上一级是Collection 上一级是Iterable(可迭代的)(接口)

Iterable中一共就三个方法  一个是iterator 迭代器(也是一个接口)

iterator 迭代器(也是一个接口),也有三个方法: 是否有下一个  下一个  删除

迭代器的使用

Iterator  it=list.iterator

Object.obj;

while(it.hasnext()){

obj=it.next();

System.out.println(obj);

}

2.LinkedList通过链表实现

LinkedList使用双向链表()

    List list=new LinkedList();
    list.add("hello");
    list.add("你好");
    list.add("李四");

    //获取元素,首先判断从哪一段开始索引能更快的找到元素
    //遍历获取节点,返回节点中记录的元素

    list.get(1);

     //找到下标节点,将节点中的item重新指向

    list.set(1,"李四");

    list.remove(1);

    

 private 不允许类外访问,把下面这个类当作一个个节点  <E>item泛型表示要存储的值 next表示下一个,prev表示前一个

双向链表:先用要存储的下标和整个的链表一般做对比,从哪一段更快的检索的数据。

ArrayList 和LinkedList的区别

ArrayList 和LinkedList都是List接口的实现

1.实现方式

ArrayList是数组,LinkedList是双向链表

2.检索方式

ArrayList通过下标,LinkedList是通过前一个后一个

3.ArrayList查找快,增删慢   LinkedList查找慢,增删块

Stack栈也是list的实现类

vetor有一个需要注意的点 synchronized  同步的 代表线程安全的,vetor只能一个个拿手套。

set

set.add("你好");

set.add("你好");

set//没有get   只关心往里面放 

set.contain("你好");//检查有没有某一个元素

Iterator it=set iterator;

while(it.hasNext()){

sout(it.next());

}

特点:

set集合不能保存重复数据

set存储值是无序的(村的顺序和放的顺序不一样)

heshset允许存放null

treeSet:做一些去重的工作

treeSet tset=new TreeSet();

//排序集合

有序:入和出的顺序一样,排序:自动排序

//不能重复数据

//不可以放null值

//实现 底层是TreeMap实现的    红黑树

Tree tset=new TreeSet

tset.add("张三");

tset.add(12.3)

tset用来排序的时候 ,不同类型的不可以排序

Map

集合  不属于Collection  他没有接口 他就是最高接口

语法:

Map map=new HashMap();

map.put("aaa",22);

map.put("aaa",21);

map.put("aaa",24);

map.put(null,null);

sout(map.put("aaa");)

提供的方法:

1.map.keySet();获取所有键的集合      遍历的方法  for循环或遍历器

2.获取所有的值

Collection values =map.values();//返回一个集合collection

//调用Collection的方法 迭代   foreach

map.containKey("aaa");//验证是否存在这个指定的参数

map.containValue("张三");//当然也可以验证是否有value这个值

 map.remove("bbb");//删除键名

1.hashmap 存储数值的方式是数组加链表

hashMap能否保存null值,可以

map中只有一个put  键的名字重复了就覆盖.

2.treemap

map里面hashtable是线程安全的

3.hashtable 的k值和value都不能为null

list有序的 可以存重复的值,

set处理权限的时候,不需要获取每一个权限,但是要知道某一个人是否有这个钱权限

map当我们存储数据的时候 需要给他一个名字 。

数组的扩容

3泛型   < E>,

定义:编写代码时不先声明这个类型,允许使用的时候再规定的数据类型

泛型是面向对象的  Object的     

package com.eazy9;

import java.util.List;

public class Day718_06<T,A,B>{//类中指定泛型,类中可以使用泛型
public static void main(String[] args) {
    
    Day718_06<String,Integer,Double> e4=new Day718_06<String,Integer,Double>();

//泛型是Object      必须传一个面向对象的值

    e4.test("");  
}
public void test(T t) {
    
}

//在方法中指定泛型

public <R>R test2(R,r){//在访问权限修饰符后面制定泛型

return null;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值