java日常笔记2016-12-20

1:活了多少天(1:Date转换成String 2:Calendar)

public class Living_Day {
	public static void main(String[] args) {
		//1:通过字符串转换
		System.out.println("请输入您的出生年月:(2014-02-04)");
		Scanner sc = new Scanner(System.in);
				
		String d = sc.nextLine();
		
		Date date1 = DateUtil.DateParse(d);
		long l1 = date1.getTime()/1000L/3600/24;
		
		Date date2 = new Date(System.currentTimeMillis());
		long l2 = date2.getTime()/1000L/3600/24;
		
		long l = l2-l1;
		System.out.println("您已经活了:"+l+"天了");
		
		//2:通过calendar类
		/*SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
		
		Calendar calendar = Calendar.getInstance();
		
		System.out.println("请输入年份:");
		
		Scanner sc1 = new Scanner(System.in);
		int year = sc1.nextInt();
		calendar.set(Calendar.YEAR, year);
		
		System.out.println("请输入月:");
		
		Scanner sc2 = new Scanner(System.in);
		int month = sc1.nextInt();
		calendar.set(Calendar.MONTH, month);
		
		System.out.println("请输入日:");
		
		Scanner sc3 = new Scanner(System.in);
		int day = sc1.nextInt();
		calendar.set(Calendar.DAY_OF_MONTH, day);
		
		Date date1 = new Date(calendar.getTimeInMillis());
		long d1 = date1.getTime()/1000L/3600/24;
		
		Date date2 = new Date(System.currentTimeMillis());
		long d2 = date2.getTime()/1000L/3600/24;
		
		long d =d2-d1;
		
		System.out.println(d);*/
	}
}


2:arraycopy()的应用

public class ArrayCopy {
	public static void main(String[] args) {
		int[] arr1 = new int[]{1,2,3};
		int[] arr2 = new int[]{7,8,9,0};
		System.arraycopy(arr1, 0, arr2, 0, 3);
		System.out.print(Arrays.toString(arr2));
	}
}

3:自定义集合(犹如List)

public class MyList {
	private Object[] objs;
	private int index=0;
	
	public MyList() {
		this.objs = new Object[5];//
	}
	
	public void add(Object obj){
		//满了:买一副新的棺材,再把那些动物一个一个倒进去
		if(index>=objs.length){
			Object[] newObjs = new Object[objs.length+objs.length/2];
			//这是比较戳了方式:用手挖坑
			/*for (int i = 0; i < objs.length; i++) {
				newObjs[i] = objs[i];
			}*/
			//这是比较戳了方式:用挖掘机挖坑
			System.arraycopy(objs, 0, newObjs, 0, objs.length);
			objs = newObjs;
		}
		
		objs[index] = obj;//1 2 3 4 5  
		index++;
	}
	
	public Object get(int index){
		return objs[index];
	}
	
	public int size(){
		return index;
	}
	
}

public class Main {
	public static void main(String[] args) {
		MyList gc = new MyList();//用数组实现,无限扩容
		gc.add("天");
		gc.add("地");
		gc.add("人"); 
		gc.add("神");
		gc.add("鬼");
		gc.add("佛");
//		System.out.println(list.size());
		for (int i = 0; i < gc.size(); i++) {
			System.out.println(gc.get(i)); 
		}
	}
}


4:StringBuffer和StringBuilder ArrayList 和Vector ArrayList和LinkedList HashSet和和LinkedHashSet

1:

1.  在执行速度方面的比较:StringBuilder >  StringBuffer   
2.  StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
3.  StringBuilder:线程非安全的
  StringBuffer:线程安全的
    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结:1.如果要操作少量的数据用 = String
                    2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
                    3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
 
2:

Vector & ArrayList 1)  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。 2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

:3. Hashtable & HashMap Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。

4:ArrayList & LinkedList(用于频繁的插入、删除) ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别:        从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能; 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。  

5:泛型在集合中的应用(当集合<泛型>使用String时,使用时不需要对象转换)

List<String> list  = new ArrayList<String>();// 允许重复
		String s1 = "天1";
		String s2 = "地2";
		String s3 = "人3";
		String s4 = "神4";
		String s5 = "鬼5";
		String s6 = "佛6";
		list.add(s1);
		list.add(s2);
		list.add(s4);
		list.add(s3);
		list.add(s6);
		list.add(s5);
		/*for (int i = 0; i < list.size(); i++) {
			String str = list.get(i);
			if(str.indexOf("地")!=-1){
				list.remove(str);//基本上是禁止使用!!
			}
		}*/


6:hashset(存放有一定规律,不同类型的规律不同)


7:List和Set的区别

List:有序、可重复

Set:无序、不可重复

8:三种遍历方式

/*for (int i = 0; i < list.size(); i++) {
			String str = list.get(i);
			if(str.indexOf("地")!=-1){
				list.remove(str);//基本上是禁止使用!!
			}
		}*/
		
		for (Iterator<String> ita =  list.iterator();ita.hasNext(); ) {
			String str = ita.next();
			if(str.indexOf("人")!=-1){
				ita.remove();//迭代器的remove 方法,推荐使用!
			}
		}
		
		for (Iterator<String> ita =  list.iterator();ita.hasNext(); ) {
			String str = ita.next();
			System.out.println(str);
		}

9:hashcode()的优先权大于equals()

在方法内设置返回值,判定哪一个优先权大

10:Comparable和Compartor比较能力和比较器的差别(比较器的权力大于比较能力)

public class Person implements Comparable<Person>{
	private String name;
	private String personNo;
	private int age;
	
	  //正数  零  负数
		public int compareTo(Person p) {
			return (this.getAge() - p.getAge());
		}

public class PersonComparator implements Comparator<Person>{
	public int compare(Person p1, Person p2) {
		return p1.getAge() - p2.getAge();
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值