- 前言:
- 一、集合类
- 1.1 List
- 1、List的特点
- 2、List的几个方法
- 1.2 Map
- 1、使用Map
- 2、遍历Map
- 1.3 Set
- 二、常用类
- 2.1 object
- 2.2 String
- 1、获得字符串长度
- 2、截取一个字符
- 3、字符串相等比较
- 2.3 StringBuffer
- 2.4 StringBuilder
- 2.5 System
- 2.6 Data
这一节我们一起来学习一下Java的一些技术,前面我已经详细的讲解了关于类的知识点,这章我不做多讲,现在进入我们的主题------集合与常用类。
一、集合类我们先来了解一下什么是集合,这个名词我们只在数学上面听过,而在Java上面他又有什么不一样的意思呢?在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。
我们前面所学的数组显然是一个集合,来看一段代码:
String[] ss = new String[10]; // 可以持有10个String对象 ss[0] = "Hello"; // 可以放入String对象 String first = ss[0]; // 可以获取String对象1.1 List
List是最基础的一种集合类,它是有序链表。那么我们看到这个有序两个字,是不是就想到了数组。其实,List与数组是十分类似的。
List内部的元素也是按照先后顺序进行存放的,每个元素都可以通过索引来找到,List的索引与数组一样,都是从0开始。
如果我们用数组来增加或删除一个元素时,我们还要考虑前后元素的移动。而使用ArrayList就减少了这一繁琐操作,当我们对元素进行增减时,ArrayList会自动移动需要移动元素。
来看一个例子:
size=5 ┌───┬───┬───┬───┬───┬───┐ │ A │ B │ C │ D │ E │ │ └───┴───┴───┴───┴───┴───┘
在ArrayList里面,有五个元素,但是有六个空位,如果我们想要添加一个元素在B的后面,那么他会出现这种情况:
size=6 ┌───┬───┬───┬───┬───┬───┐ │ A │ B │ F │ C │ D │ E │ └───┴───┴───┴───┴───┴───┘
在元素B的后面,元素C、D、E会向后移动一个位置,为元素F留下一个位置,并且将size加1即可。
如果这时候我们要继续添加元素的话mArrayList会自动创建一个更大的数组,将旧的数组搬到新的数组里,
size=6 ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ │ A │ B │ F │ C │ D │ E │ │ │ │ │ │ │ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
因此,我们用ArrayList更为方便一些,当增减元素时候,我们无需考虑元素的移动问题,只需要将size的值进行相应的变动即可。
2、List的几个方法(1)在末尾添加一个元素:void add(E e)
(2)在指定索引添加一个元素:void add(int index, E e)
(3)删除指定索引的元素:int remove(int index)
(4)删除某个元素:int remove(Object e)
(5)获取指定索引的元素:E get(int index)
(6)获取链表大小(包含元素的个数):int size()
我们虽然可以利用List来查找某一个数据,但是操作太过于繁杂,我们将要对比一半的数据来查找,这种效率太过于低下。因而我们引入Map来解决这种问题,Map这种键值(key-value)映射表的数据结构,作用就是能高效通过key快速查找value(元素)。
代码如下:
public class Main {
public static void main(String[] args) {
student s=new student ("xming",98);
Map map=new HashMap<>();
map.put("xming",s);
student target=map.get("xming");
System.out.println(target==s);
System.out.println(target.score);
student another=map.get("BOb");
System.out.println(another);
}
}
class student{
public String name;
public int score;
public student (String name,int score){
this.name=name;
this.score=score;}
}
通过上述代码可知:Map
(1)在for循环中使用entries实现Map的遍历
Mapmap = new HashMap (); map.put("熊大", "棕色"); map.put("熊二", "黄色"); for(Map.Entry entry : map.entrySet()){ String mapKey = entry.getKey(); String mapValue = entry.getValue(); System.out.println(mapKey+":"+mapValue); }
(2)在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好;
Mapmap = new HashMap (); map.put("熊大", "棕色"); map.put("熊二", "黄色"); //key for(String key : map.keySet()){ String value = map.get(key); System.out.println(key+":"+value); } //value for(String value : map.values()){ System.out.println(value); }
(3)通过Iterator遍历
Iterator1.3 Set> entries = map.entrySet().iterator(); while(entries.hasNext()){ Entry entry = entries.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println(key+":"+value); }
我们知道,Map用于存储key-value的映射,对于充当key的对象,是不能重复的,并且,不但需要正确覆写equals()方法,还要正确覆写hashCode()方法。但是,如果我们只需要存储不重复的key,并不需要存储映射的value,那么这时,就可以使用Set。
Set用于存储不重复的元素集合,它主要提供以下几个方法:
(1)将元素添加进Set:boolean add(E e)
(2)将元素从Set删除:boolean remove(Object e)
(3)判断是否包含元素:boolean contains(Object e)
来看一段代码图:
┌───┐
│Set│
└───┘
▲
┌────┴─────┐
│ │
┌───────┐ ┌─────────┐
│HashSet│ │SortedSet│
└───────┘ └─────────┘
▲
│
┌─────────┐
│ TreeSet │
└─────────┘
这个图很清楚说明了Set接口特点:
(1)HashSet是无序的,因为它实现了Set接口,并没有实现SortedSet接口;
(2)TreeSet是有序的,因为它实现了SortedSet接口。
我们在前面学了,如果在继承中,没有标明extend,那么它默认为Object类。所以我们可以将Object成为所有类的父类。
class class{
}
class class extends Object{
}
Object类提供无参构造方法 ,之所以提供这样的无参构造,是因为在子类对象实例化时都会默认调用父类中的无参构造方法,这样在定义类时即使没有明确定义父类为Object,读者也不会感觉代码的强制性要求。
看一个表格:
字符串类的相关方法有很多。
1、获得字符串长度确定字符串长度的方法格式如下。
public int length () ;
String s2=new String ("我爱你china") ;
System. out. println (s2.length());
2、截取一个字符
public char charAt (int index)
该方法返回指定索引处的char值。索引范围为从0到length()-1。字符串的第一个char值在索引0处,第二个在索引1处,依此类推。举例如下。
char ch; ch=“abc”.charAt(1) ;返回’b’3、字符串相等比较
public boolean equals (String s)
字符串对象调用String 类的equals方法,比较当前字符串对象是否与参数制定的字符串s对象相同。举例如下。
String s1=“Hello”; String s2=new String (“Hello”); s1.equals(s2); //true2.3 StringBuffer
下面内容摘自《Java语言设计》,并且经过整理后的知识点,资料最全面,值得收藏起来。
(1)将boolean参数的字符串表示形式追加到序列中。
StringBuffer append(boolean b);
(2)将char参数的字符串表示形式追加到此序列。
StringBuffer append(char c);
(3)将char数组参数的字符串表示形式追加到此序列。
StringBuffer append(char[] str);
(2)将char数组参数的子数组的字符串表示形式追加到此序列。
StringBuffer append(char[] str, int offset, int len);
(4)将指定的内容附加CharSequence到此序列。
StringBuffer append(CharSequence s)
(5)将指定的子CharSequence序列追加到此序列。
StringBuffer append(CharSequence s, int start, int end);
(5)将double 参数的字符串表示形式追加到此序列。
StringBuffer append(double d);
(6)将float 参数的字符串表示形式追加到此序列。
StringBuffer append(float f);
(7)将int 参数的字符串表示形式追加到此序列。
StringBuffer append(int i);
(8)将long 参数的字符串表示形式追加到此序列。
StringBuffer append(long lng)
(9)附加Object参数的字符串表示形式。v
StringBuffer append(Object obj);
(10)将指定的字符串追加到此字符序列。
StringBuffer append(String str);
(11)将指定的内容附加StringBuffer到此序列。
StringBuffer append(StringBuffer sb);
(12)将codePoint参数的字符串表示形式追加到此序列。
StringBuffer appendCodePoint(int codePoint);
(13)返回当前容量。
int capacity();
(14)返回char指定索引处的此序列中的值。
char charAt(int index);
(15)返回指定索引处的字符(Unicode代码点)。
int codePointAt(int index);
(16)返回指定索引之前的字符(Unicode代码点)。
int codePointBefore(int index);
(17)返回此序列的指定文本范围内的Unicode代码点数。
int codePointCount(int beginIndex, int endIndex);
(18)删除此序列的子字符串中的字符。
StringBuffer delete(int start, int end);
(19)char按此顺序删除指定位置。
StringBuffer deleteCharAt(int index);
(20)确保容量至少等于指定的最小值。
void ensureCapacity(int minimumCapacity)
(21)字符从此序列复制到目标字符数组中dst。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);
(22)返回指定子字符串第一次出现的字符串中的索引。
int indexOf(String str)
(23)从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。
int indexOf(String str, int fromIndex);
(24)将boolea参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, boolean b);
(25)将char参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, char c);
(26)将char数组参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, char[] str);
(27)将str数组参数的子数组的字符串表示形式插入到此序列中。
StringBuffer insert(int index, char[] str, int offset, int len);
(28)将指定的内容CharSequence插入此序列中。
StringBuffer insert(int dstOffset, CharSequence s);
(29)将指定的子CharSequence序列插入此序列中。
StringBuffer insert(int dstOffset, CharSequence s, int start, int end);
(30)将double参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, double d);
(31)将float参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, float f);
(32)将第二个int 参数的字符串表示形式插入到此序列中。
StringBuffer insert(int offset, int i);
(33)将long参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, long l);
(34)将Object 参数的字符串表示形式插入此字符序列。
StringBuffer insert(int offset, Object obj);
(35)将字符串插入此字符序列。
StringBuffer insert(int offset, String str);
(36)返回指定子字符串最后一次出现在字符串中的索引。
int lastIndexOf(String str);
(37)返回指定子字符串最后一次出现在字符串中的索引。
int lastIndexOf(String str, int fromIndex);
(38)返回该字符串的长度(字符数)。
int length();
(39)返回此序列中与代码点给定index的偏移量的索引codePointOffset。
int offsetByCodePoints(int index, int codePointOffset);
(40)用指定的字符替换此序列的子字符串中的字符String。
StringBuffer replace(int start, int end, String str);
(41)返回此字符序列的反向替换。
StringBuffer reverse()
(42)指定索引处的字符设置为ch。
void setCharAt(int index, char ch);
(43)设置字符序列的长度。
void setLength(int newLength);
(44)返回一个新的字符序列,它是该序列的子序列。
CharSequence subSequence(int start, int end);
(45)返回一个新的String,包含此字符序列中当前包含的字符的子序列。
String substring(int start);
(46)返回一个新的String,包含此序列中当前包含的字符的子序列。
String substring(int start, int end);
(47)返回表示此序列中数据的字符串。
String toString()
(48)尝试减少用于字符序列的存储空间。
void trimToSize();
说明如下:
StringBuilder(); //以默认容量创建空的StringBuilder对象 StringBuilder(int capacity); //以指定容量创建空的StringBuilder对象 StringBuilder(String str); //以指定的字符串创建StringBuilder对象 //获取功能 int capacity();//容量 int length(); //添加功能 append(int value);//追加。可以追加多种类型 insert(int offset,String s);//在指定的位置插入指定数据 //删除功能 deleteCharAt(int index);//删除指定索引处的元素 delete(int start,int end);//删除[start,start-1]范围内的元素 替换功能 replace(int start,int end,String s);//将[start,end-1]范围内的元素替换成指定字符串 反转功能 reverse();//元素反转 截取功能 String subString(int start);//截取指定位置一直到末尾 String subString(int start,int end);//截取[start,end-1]范围2.5 System
System没有构造方法
成员方法:
gc( ); //运行垃圾回收处理机制(系统会在某个不确定的时间调用该方法) 会调用finalize( ),进行垃圾回收。 exit(int status); //退出JVM,0表示非异常退出。 currentTimeMills(); //获取当前时间毫秒值。 arrayCopy(Object[] srcArr,int srcPos,Object[] desArr,int destPos,int len); //数组复制。2.6 Data
日期类:
//构造方法 Date( ); //以当前时间毫秒值创建Date对象。 Date(long time); //以指定的毫秒值创建Date对象。 //成员方法 long getTime( ); //获取Date对象的毫秒值。 setTime(long time); //设置Data对象的毫秒值。



