字符串
判断字符串开头结尾等可使用charAt(索引),该方法根据索引返回该位置的值
分割字符串 使用indexOf(字符),该方法返回第一个字符的索引值
public String inexOfTest(String str){
while(true){
String splitStr=null;
int j=str.indexOf(";");
if (j<0) break;
splitStr=str.substring(0,j);
str=str.substring(j+1);
}
}
StringBuilder线程不安全效率高,StringBuffer线程安全 如果要提高效率可以设置容量参数,初始为16字节
线程安全:
vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
statck:堆栈类,先进后出
hashtable:就比hashmap多了个线程安全
enumeration:枚举,相当于迭代器
增加到尾端 ArrayList
增加到任意位置 LinkedList
删除任意位置头部 LinkedList 中部ArrayList 尾部 都可以
ArrayList Vector是数组操作 LinkedList是双向链表操作
Vector和ArrayList在已知数组容量的情况下,自定义初始化容量,减少数组扩容操作,提高堆内存大小,可以有效提高性能
遍历:
ArrarList使用for循环随机访问最快 LinkedList不能使用随机访问,因为每次都要遍历列表,优先使用迭代器访问
for(Iterator <String> it=list.iterator();it.hashnext();){
temp=it.next();
}
HashMap:
线程不安全;
HashMap在结局Hash冲突的时候采取的策略为:HashMap广义上为数组结构,如果一个元素包括key value hash next四个属性,当出现hash冲突的时候,首先新值替换原来的值,然后新值的next指向旧值的内存地址,冲突的元素为链表结构在遍历hash非常糟糕的HashMap的时候速度非常慢,因为数据在遍历链表性能较弱。
HashMap可以通过设置HashMap的容量参数来提高性能HashMap(int initialCapacity,float loadFactor);
initialCapactiy设置HashMap的初始容量,当知道HashMap大小的时候设置恰当的容量大小能提高性能;
loadFactor为负载银子,HashMap存入的数据所占总容量的比例超过此值的时候,HashMap会自动扩容,扩容操作会消耗时间,默认为0.75,负载因子越接近1使用的内存越小
LinkedHashMap
保持列表按照输入次序排列,在HashMap的基础上单个元素的属性增加了before和after,通过一种链表结构再来维护有序性,before指向前一个元素内存地址,after指向下一个元素内存地址
TreeMap
性能优秀的根据Key排序列表,实现为红黑树,最坏O(log O)
Set
实际为对Map的封装key不能重复,LinkedSet->LinkedMap基于hash快速插入先进先出的顺序,TreeSet->TreeMap排序好的顺序,HashSet->HashMap基于hash快速插入无顺序;
集合访问的优化:
1 分离循环重复调用代码
List list=new List();
list.add("");
.
.
.
.
list.add("");
int lSize=list.size(); //将size放到外面,这样就只需要访问一次
for(int i=0;i<lSize;i++){......}
2 减少方法的使用
采用int lSize=this.elementCount; 获取元素采用 s=(String) list.elementData[i]代替s=list.get(i);
3 使用if(list instanceof RandomAccess) 判断是否为基于数组的结构,当为输入结构返回True采用随机访问,因为只有数组结构才可以快速随机访问
判断字符串开头结尾等可使用charAt(索引),该方法根据索引返回该位置的值
分割字符串 使用indexOf(字符),该方法返回第一个字符的索引值
public String inexOfTest(String str){
while(true){
String splitStr=null;
int j=str.indexOf(";");
if (j<0) break;
splitStr=str.substring(0,j);
str=str.substring(j+1);
}
}
StringBuilder线程不安全效率高,StringBuffer线程安全 如果要提高效率可以设置容量参数,初始为16字节
线程安全:
vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
statck:堆栈类,先进后出
hashtable:就比hashmap多了个线程安全
enumeration:枚举,相当于迭代器
增加到尾端 ArrayList
增加到任意位置 LinkedList
删除任意位置头部 LinkedList 中部ArrayList 尾部 都可以
ArrayList Vector是数组操作 LinkedList是双向链表操作
Vector和ArrayList在已知数组容量的情况下,自定义初始化容量,减少数组扩容操作,提高堆内存大小,可以有效提高性能
遍历:
ArrarList使用for循环随机访问最快 LinkedList不能使用随机访问,因为每次都要遍历列表,优先使用迭代器访问
for(Iterator <String> it=list.iterator();it.hashnext();){
temp=it.next();
}
HashMap:
线程不安全;
HashMap在结局Hash冲突的时候采取的策略为:HashMap广义上为数组结构,如果一个元素包括key value hash next四个属性,当出现hash冲突的时候,首先新值替换原来的值,然后新值的next指向旧值的内存地址,冲突的元素为链表结构在遍历hash非常糟糕的HashMap的时候速度非常慢,因为数据在遍历链表性能较弱。
HashMap可以通过设置HashMap的容量参数来提高性能HashMap(int initialCapacity,float loadFactor);
initialCapactiy设置HashMap的初始容量,当知道HashMap大小的时候设置恰当的容量大小能提高性能;
loadFactor为负载银子,HashMap存入的数据所占总容量的比例超过此值的时候,HashMap会自动扩容,扩容操作会消耗时间,默认为0.75,负载因子越接近1使用的内存越小
LinkedHashMap
保持列表按照输入次序排列,在HashMap的基础上单个元素的属性增加了before和after,通过一种链表结构再来维护有序性,before指向前一个元素内存地址,after指向下一个元素内存地址
TreeMap
性能优秀的根据Key排序列表,实现为红黑树,最坏O(log O)
Set
实际为对Map的封装key不能重复,LinkedSet->LinkedMap基于hash快速插入先进先出的顺序,TreeSet->TreeMap排序好的顺序,HashSet->HashMap基于hash快速插入无顺序;
集合访问的优化:
1 分离循环重复调用代码
List list=new List();
list.add("");
.
.
.
.
list.add("");
int lSize=list.size(); //将size放到外面,这样就只需要访问一次
for(int i=0;i<lSize;i++){......}
2 减少方法的使用
采用int lSize=this.elementCount; 获取元素采用 s=(String) list.elementData[i]代替s=list.get(i);
3 使用if(list instanceof RandomAccess) 判断是否为基于数组的结构,当为输入结构返回True采用随机访问,因为只有数组结构才可以快速随机访问