HashSet的存储原理:
往HashSet中添加元素的时候,首先会元素的HashCode方法得到元素的哈希值,通过元素的哈希值就可以算出该元素在哈希表中的位置。 如果算出的位置没有其他元素,则可以直接存储到该位置。 但如果算出的元素目前已有其他元素在该位置,那么还会调用该元素的equals方法与该位置上的元素进行比较,如果返回值是false,那么该元素可以存储到该位置,如果返回值是true,则会被视为重复元素,不允许存储。
StringBuffer字符串缓冲区类
字符串的内容一旦创建则不允许改变,一旦改变则会创建一个新的字符串对象。 字符串的内容一般不会随意的增加,因为每增加一次都会创建一个新的对象。 如果可能会修改字符串的内容就可以使用字符串缓冲区类了。
一道题:使用StringBuffer的无参构造方法创建的对象初始化容量是多少?当容量不够时会增加多少?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? StringBuffer底层是维护了一个字符数组,储存字符时实际上是存储在该字符数组中的,该字符数组的初始化容量是16,当容量不够时会自动增加一倍。
说出StringBuffer和StringBuilder的区别? 相同点:都是字符串缓冲类,底层都维护了一个字符数组用于存储数据。 不同点:StringBuffer是线程安全的,StringBuilder是线程非安全的。StringBuffer是jdk1.0出现的,StringBuilder是jdk1.5出来的 , 推荐使用StringBuilder ,因为其效率更高,而且现实中基本不会用多线程操作字符串,在此基本不用担心线程安全问题。真碰到这种问题再用StringBuffer或其他办法解决。
文末再送上一张室友在pdd买的美女壁纸缓解一下大家疲劳的眼睛。
|