原创

Java关于数据类型,字符串,数组,集合的介绍

java的基本数据类型 
数据类型 大小 对应包装类
byte(字节) 1 ( 8位) Byte
shot(短整型) 2 (16位) Short
int(整型) 4 (32位) Integer
long(长整型) 8 (32位) Long
float(浮点型) 4 (32位) Float
double(双精度) 8 (64位) Double
char(字符型) 2 (16位) Character
boolean(布尔型) 1 ( 1位) Boolean
注: String是基本数据类型吗?(String不是基本数据类型)
String的长度是多少,有限制?(长度受内存大小的影响)
字符串常见实例与函数 
java.lang.String
1,字符串查找 indexOf()方法在字符串中查找字符串出现的位置,如果存在返回字符串出现的位置,如果没有返回-1 

public static void main(String[] args) {	
String str = "Google Java Taobao";
int intIndex = str.indexOf("Java");
if(intIndex == - 1){
System.out.println("没有找到字符串");
}else{
System.out.println("检索字符串位置为 " + intIndex);
}
}

字符串函数lastIndexOf(),来查找某个字符串在主字符串中出现的最后一次的位置。

public static void main(String[] args) { 
String str = "元旦快乐元旦";
int lastIndex = str.lastIndexOf("元旦");
if(lastIndex == - 1){
System.out.println("没有找到字符串");
}else{
System.out.println("字符串最后出现的位置: "+ lastIndex);
}
}

通过字符串函数 substring() 函数来删除字符串中的一个字符,我们将功能封装在 removeCharAt 函数中。

public static void main(String args[]) {
String str = "元旦快乐吗";
System.out.println(removeCharAt(str, 4));
}
public static String removeCharAt(String s, int pos) {
return s.substring(0, pos) + s.substring(pos + 1);
}

4,替换字符串
String 类的 replace 方法可以替换字符串中的字符  

public static void main(String args[]){ 
String str="元旦快乐吗";
System.out.println(str.replace('吗','!')); //替换全部
}

5,字符串分割
split(string) 方法通过指定分隔符将字符串分割为数组。

public static void main(String args[]){
String str="元旦快乐-元旦快乐-元旦快乐";
String[] temp;
String delimeter = "-"; //指定分隔符
temp = str.split(delimeter); //分割字符串
//普通for循环
for(int i =0; i < temp.length; i++){
System.out.println(temp[i]);
System.out.println("");
}
}

注:字符串大小写转换,反转,这些不进行一一介绍了
6,String,StringBuffer,StringBuilder 以及equals和==的用法
一,字符串常量 不可变 使用字符串拼接时是不同的2个空间(java把String类声明的final类)
二,字符串变量 可变 线程安全 字符串拼接直接在字符串后追加
三,字符串变量 可变 非线程安全 字符串拼接直接在字符串后追加
1,StringBuilder执行效率高于StringBuffer高于String.
2,String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer 是线程安全的而StringBuilder是线程非安全的,所以StringBuilder的效率高于 StringBuffer.
3,对于大数据量的字符串的拼接,采用StringBuffer,StringBuilder.
数组的介绍与使用 
Java 中定义数组的语法有两种:
type arrayName[];
type[] arrayName;
type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量。例如:
int demoArray[];
int[] demoArray;
这两种形式没有区别,使用效果完全一样,读者可根据自己的编程习惯选择。在声明数组的同时进行初始化(静态初始化),也可以在声明以后进行初始化(动态初始化)
// 静态初始化
// 静态初始化的同时就为数组元素分配空间并赋值
int intArray[] = {1,2,3,4};
String stringArray[] = {"ufjia", "http://www.ufjia.com", "面试之家"};
// 动态初始化
float floatArray[] = new float[3];
floatArray[0] = 2.5f;
floatArray[1] = 52.0f;
floatArray[2] = 13.14F;
数组的引用 
数组是通过下标引用的:
每个数组都有一个length属性来指明它的长度,例如 intArray.length 指明数组 intArray 的长度。 数组的遍历 经常需要遍历数组以获取数组中的每一个元素。最容易想到的方法是for循环

public static void main(String[] args) {
int[] arrayDemo = {1, 2, 4, 7, 9, 192, 100};
//根据下标遍历
for(int i=0,len=arrayDemo.length; i<len; i++){
System.out.println(arrayDemo[i] + ", ");
}
//java8===stream遍历
Arrays.asList(arrayDemo).stream().forEach(x -> System.out.println(x));
Arrays.asList(arrayDemo).stream().forEach(System.out::println);
}

集合的介绍与使用 
Collection接口:
collection是最基本的集合接口,一个collection代表一组object,即collection允许相同的元素有一些不行,一些能排序,一些不行,Javasdk不提供直接继承自collection的类,Java sdk提供的类都是继承自collection的子类,如list和set。
所有实现collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的collection,有一个collection参数的构造函数用于创建一个新的collection,这个新的collection与传入的collection有相同的元素,后一个构造函数允许用户复制一个collection。
如何遍历collection中每一个元素?不论collection的实际类型如何,他都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可以逐一访问collection中的每一个元素。
例:

public static void main(String[] args) {	
Collection coll = new ArrayList();
coll.add("元旦快乐");
coll.add("新年快乐");
coll.add("春节返乡旺季");
coll.add("春节抢票");
Iterator it = coll.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}

collection接口派生的两个接口是List和Set。
List接口 
List是有序的collection,使用此接口能够精确的控制每个元素插入的位置,能够使用索引来访问List中的元素,这类似于数组。实现List接口的常用类有LikedList,ArrayList。vector和Stack。
LinkedList类 
LinkedList实现了List的接口。允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或者尾部,这些操作使LinkedList可被用作堆栈。队列或者双向队列。
注:LinkedList没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,一种解决方法是在创建List时构造一个构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
ArrayList类 
ArrayList是开发过程中最常用的一个类,ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size。isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需O(n)的时间。其他的方法运行时间为线性。每个ArrayList实例都有一个容量,即用于存储元素的数组大小,这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。和LinkedList一样,ArrayList也是非同步的。
vector类
Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。 
Stack 类
Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得 Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。
Set接口
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
注:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些 
Java8中新增加的集合操作
forEach方法,可以使用Lambda表达式来遍历集合元素 
forEachRemaining方法,,也可以使用Lambda来遍历 
removeIF方法,也可以用来操作lambda 
Stream、intStream、LongStream、DoubleStream等流式API 
stream()方法,该方法用来返回该集合对应的流
注:后面在lambda达表达式中会详细介绍
Map接口
请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
Map是一个以键值对存储的接口。Map下有两个具体的实现,分别是HashMap和HashTable. 
Hashtable类
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。Hashtable是同步的
HashMap类 
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
相关以上内容所涉及到的面试题,将出现在学习项。

正文到此结束