第一部分

  RecyclerVIew是一个可以替代listview和Gallery的有效空间而且在support-v7中有了低版本支持,具体使用方式还是规规矩矩的适配器加控件模式。我们先来看看官网的介绍:

介绍

RecyclerView  is a more advanced and flexible version of  ListView . This widget is a container for large sets of views that can be recycled and scrolled very efficiently. Use the  RecyclerView  widget when you have lists with elements that change dynamically.

RecyclerView比listview更先进更灵活,对于很多的视图它就是一个容器,可以有效的重用和滚动。当数据动态变化的时候请使用它。

RecyclerView  is easy to use, because it provides:

  • A layout manager for positioning items
  • Default animations for common item operations
  • You also have the flexibility to define custom layout managers and animations for this widget.

RecyclerView使用起来很方便因为它提供:

  • 它为item的定位提供一个layoutmanager
  • 为item的操作提供一个缺省的animations
  • 您还可以灵活地定义这个小部件的自定义布局管理器和动画

To use the  RecyclerView  widget, you have to specify an adapter and a layout manager. To create an adapter, you extend the  RecyclerView.Adapter  class. The details of the implementation depend on the specifics of your dataset and the type of views. For more information, see the  examplesbelow.

为了使用RecyclerVIew,你必须指定一个adapter和一个layoutmanager,为了创建一个adapter,你必须得继承RecyclerView.Adapter,详细的实现方法取决与你的数据集和你视图的类型。

Google官方的一个例子:

1.布局文件activity_main.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="${relativePackage}.${activityClass}" >
  6.  
  7. <!-- A RecyclerView with some commonly used attributes -->
  8.  
  9. <android.support.v7.widget.RecyclerView
  10. android:id="@+id/my_recycler_view"
  11. android:layout_width="match_parent"
  12. android:layout_height="match_parent"
  13. android:scrollbars="horizontal"
  14. />
  15.  
  16. </RelativeLayout>

2.item的布局文件,就是一个textview

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:layout_gravity="center_horizontal"
  6. android:text="Large Text"
  7. android:textAppearance="?android:attr/textAppearanceLarge" />

3.主要代码

3.1 定义控件和布局

  1. /*
  2. * recyclerview提供这些内置的布局管理器:
  3. * linearlayoutmanager 显示垂直滚动列表或水平的项目。
  4. * gridlayoutmanager 显示在一个网格项目。
  5. * staggeredgridlayoutmanager 显示在交错网格项目。
  6. * 自定义的布局管理器,需要继承recyclerview.layoutmanager类。
  7. *
  8. * add/remove items时的动画是默认启用的。
  9. * 自定义这些动画需要继承RecyclerView.ItemAnimator,并实现RecyclerView.setItemAnimator()
  10. */
  1. private RecyclerView mRecyclerView;
  2. private RecyclerView.Adapter<MyAdapter.ViewHolder> mAdapter;
  3. private LinearLayoutManager mLayoutManager;
  4.  
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9.  
  10. String [] myDataset = {"Android","ios","jack","tony","window","mac","1234","hehe","495948"};
  11.  
  12. mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
  13.  
  14. // improve performance if you know that changes in content
  15. // do not change the size of the RecyclerView
  16. mRecyclerView.setHasFixedSize(true);
  17.  
  18. // use a linear layout manager
  19. mLayoutManager = new LinearLayoutManager(this);
  20. //设置RecycleView的显示方向:(默认为垂直) 水平
  21. mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  22. mRecyclerView.setLayoutManager(mLayoutManager);
  23.  
  24. // specify an adapter (see also next example)
  25. mAdapter = new MyAdapter(myDataset);
  26. mRecyclerView.setAdapter(mAdapter);
  27. }

3.2 适配器

  1. public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
  2. private String[] mDataset;
  3.  
  4. // Provide a reference to the type of views that you are using
  5. // (custom viewholder)
  6. public class ViewHolder extends RecyclerView.ViewHolder {
  7. public TextView mTextView;
  8.  
  9. public ViewHolder(TextView v) {
  10. super(v);
  11. mTextView = v;
  12. }
  13. }
  14.  
  15. // Provide a suitable constructor (depends on the kind of dataset)
  16. public MyAdapter(String[] myDataset) {
  17. mDataset = myDataset;
  18. }
  19.  
  20. // Create new views (invoked by the layout manager)
  21. @Override
  22. public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
  23. int viewType) {
  24. // create a new view
  25. View v = LayoutInflater.from(parent.getContext()).inflate(
  26. R.layout.my_text_view, parent, false);
  27. // set the view's size, margins, paddings and layout parameters
  28.  
  29. ViewHolder vh = new ViewHolder((TextView) v);
  30. return vh;
  31. }
  32.  
  33. // Replace the contents of a view (invoked by the layout manager)
  34. @Override
  35. public void onBindViewHolder(ViewHolder holder, int position) {
  36. // - get element from your dataset at this position
  37. // - replace the contents of the view with that element
  38. holder.mTextView.setText(mDataset[position]);
  39.  
  40. }
  41.  
  42. // Return the size of your dataset (invoked by the layout manager)
  43. @Override
  44. public int getItemCount() {
  45. return mDataset.length;
  46. }
  47. }

全部代码:

  1. package com.kale.recyclerviewtest;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.support.v7.widget.LinearLayoutManager;
  6. import android.support.v7.widget.RecyclerView;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.TextView;
  11.  
  12. public class MainActivity extends Activity {
  13.  
  14. private RecyclerView mRecyclerView;
  15. private RecyclerView.Adapter<MyAdapter.ViewHolder> mAdapter;
  16. private LinearLayoutManager mLayoutManager;
  17.  
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22.  
  23. String [] myDataset = {"Android","ios","jack","tony","window","mac","1234","hehe","495948"};
  24.  
  25. mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
  26.  
  27. // improve performance if you know that changes in content
  28. // do not change the size of the RecyclerView
  29. mRecyclerView.setHasFixedSize(true);
  30.  
  31. // use a linear layout manager
  32. mLayoutManager = new LinearLayoutManager(this);
  33. //设置RecycleView的显示方向:(默认为垂直) 水平
  34. mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  35. mRecyclerView.setLayoutManager(mLayoutManager);
  36.  
  37. // specify an adapter (see also next example)
  38. mAdapter = new MyAdapter(myDataset);
  39. mRecyclerView.setAdapter(mAdapter);
  40. }
  41.  
  42. public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
  43. private String[] mDataset;
  44.  
  45. // Provide a reference to the type of views that you are using
  46. // (custom viewholder)
  47. public class ViewHolder extends RecyclerView.ViewHolder {
  48. public TextView mTextView;
  49.  
  50. public ViewHolder(TextView v) {
  51. super(v);
  52. mTextView = v;
  53. }
  54. }
  55.  
  56. // Provide a suitable constructor (depends on the kind of dataset)
  57. public MyAdapter(String[] myDataset) {
  58. mDataset = myDataset;
  59. }
  60.  
  61. // Create new views (invoked by the layout manager)
  62. @Override
  63. public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
  64. int viewType) {
  65. // create a new view
  66. View v = LayoutInflater.from(parent.getContext()).inflate(
  67. R.layout.my_text_view, parent, false);
  68. // set the view's size, margins, paddings and layout parameters
  69.  
  70. ViewHolder vh = new ViewHolder((TextView) v);
  71. return vh;
  72. }
  73.  
  74. // Replace the contents of a view (invoked by the layout manager)
  75. @Override
  76. public void onBindViewHolder(ViewHolder holder, int position) {
  77. // - get element from your dataset at this position
  78. // - replace the contents of the view with that element
  79. holder.mTextView.setText(mDataset[position]);
  80.  
  81. }
  82.  
  83. // Return the size of your dataset (invoked by the layout manager)
  84. @Override
  85. public int getItemCount() {
  86. return mDataset.length;
  87. }
  88. }
  89. }

PS:这个控件好就好在可以自定义动画和布局的方向,在以前还需要我们自己写横向滑动的listview,现在有了它就方便多了。但缺点是没有listview那么完善,没添加头、尾视图的功能。再说下它的动画和布局类,以后用到的话就知道了。

(1)为每个条目位置提供了layout管理器(RecyclerView.setLayoutManager

(2)为每个条目设置了操作动画(RecyclerView.setItemAnimator

第二部分

  现在我们知道它是什么,怎么用了后。我们就想自己实现点击效果,要知道它是不提供itemclicklistner的,所以需要换个思路,在viewHolder中进行实现。其实这样的分离让代码更加简单和便于维护了。下面的代码仅仅是概要演示,具体实际操作中我们完全可以利用viewholder来提升滑动的性能,如果viewHolder 中有这个视图那么就调出,如果没有那么就重新findviewById。

1.viewHolder

viewholder中传入了一个父视图,直接绑定监听器。然后根据需要找到子视图,进行操作。

  1. /**
  2. * @author:Jack Tony
  3. * @tips :写一个viewHolder,用来得到控件。
  4. * @date :2014-11-1
  5. */
  6. public class MyViewHolder extends RecyclerView.ViewHolder implements OnClickListener,OnLongClickListener{
  7.  
  8. private TextView mTextView;
  9. private int mPosition;
  10.  
  11. public MyViewHolder(View rootView) {
  12. super(rootView);
  13. //给父控件绑定监听器
  14. rootView.setOnClickListener(this);
  15. //通过findviewbyId找到item中的控件进行设置
  16. mTextView = (TextView)rootView.findViewById(R.id.textView1);
  17. ImageView imageView = (ImageView)rootView.findViewById(R.id.imageView1);
  18. imageView.setImageResource(R.drawable.kale);
  19. }
  20.  
  21. public void setPosition(int position) {
  22. mPosition = position;
  23. }
  24.  
  25. @Override
  26. public boolean onLongClick(View v) {
  27. // TODO 自动生成的方法存根
  28. return false;
  29. }
  30.  
  31. @Override
  32. public void onClick(View v) {
  33. // TODO 自动生成的方法存根
  34. Toast.makeText(MainActivity.this, "click "+mPosition, 0).show();
  35. }
  36.  
  37. }

2.Adapter

因为用了自己写的MyHolder,所以这里类的泛型中应该传入自己的这个viewHolder的类名。具体写法还是和第一部分中的写法一样,甚至简单了很多。因为这里我们只需要关系数据源和位置即可。

  1. /**
  2. * @author:Jack Tony
  3. * @tips :这里面完全可以根据viewholder是否为null进行优化
  4. * @date :2014-11-1
  5. */
  6. public class Adapter extends RecyclerView.Adapter<MyViewHolder>{
  7.  
  8. private String[] mDataset;
  9. private MyViewHolder mViewHoder;
  10.  
  11. public Adapter(String[] myDataset) {
  12. mDataset = myDataset;
  13. }
  14.  
  15. @Override
  16. public int getItemCount() {
  17. // TODO 自动生成的方法存根
  18. return mDataset.length;
  19. }
  20.  
  21. @Override
  22. public void onBindViewHolder(MyViewHolder holder, int position) {
  23. mViewHoder.mTextView.setText(mDataset[position]);
  24. mViewHoder.setPosition(position);
  25. }
  26.  
  27. @Override
  28. public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  29. View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
  30. mViewHoder = new MyViewHolder(v);
  31. return mViewHoder;
  32. }
  33.  
  34. }

3.Animation

通过继承RecyclerView.ItemAnimator这个类就可以给RecylerView添加item动画,至于具体的实现网上没有什么资料。所以我这里也没想出怎么玩的,以后再补上吧。这里先给出空实现。

  1. public class MyAnim extends RecyclerView.ItemAnimator{
  2.  
  3. @Override
  4. public boolean animateAdd(ViewHolder arg0) {
  5. // TODO 自动生成的方法存根
  6. return false;
  7. }
  8.  
  9. @Override
  10. public boolean animateChange(ViewHolder arg0, ViewHolder arg1,
  11. int arg2, int arg3, int arg4, int arg5) {
  12. // TODO 自动生成的方法存根
  13. return false;
  14. }
  15.  
  16. @Override
  17. public boolean animateMove(ViewHolder holder, int fromX, int fromY, int toX, int toY) {
  18. // TODO 自动生成的方法存根
  19. return false;
  20. }
  21.  
  22. @Override
  23. public boolean animateRemove(ViewHolder arg0) {
  24. // TODO 自动生成的方法存根
  25. return false;
  26. }
  27.  
  28. @Override
  29. public void endAnimation(ViewHolder arg0) {
  30. // TODO 自动生成的方法存根
  31.  
  32. }
  33.  
  34. @Override
  35. public void endAnimations() {
  36. // TODO 自动生成的方法存根
  37.  
  38. }
  39.  
  40. @Override
  41. public boolean isRunning() {
  42. // TODO 自动生成的方法存根
  43. return false;
  44. }
  45.  
  46. @Override
  47. public void runPendingAnimations() {
  48. // TODO 自动生成的方法存根
  49.  
  50. }
  51.  
  52. }
  1. mRecyclerView.setItemAnimator(new MyAnim());

全部代码:

  1. package com.kale.recyclerviewtest;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.support.v7.widget.LinearLayoutManager;
  6. import android.support.v7.widget.RecyclerView;
  7. import android.support.v7.widget.RecyclerView.ViewHolder;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.View.OnLongClickListener;
  12. import android.view.ViewGroup;
  13. import android.widget.ImageView;
  14. import android.widget.TextView;
  15. import android.widget.Toast;
  16.  
  17. public class MainActivity extends Activity {
  18.  
  19. private RecyclerView mRecyclerView;
  20. private Adapter mAdapter;
  21. private LinearLayoutManager mLayoutManager;
  22.  
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27.  
  28. String [] myDataset = {"Android","ios","jack","tony","window","mac","C#","hehe","C++"};
  29.  
  30. mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
  31.  
  32. // improve performance if you know that changes in content
  33. // do not change the size of the RecyclerView
  34. mRecyclerView.setHasFixedSize(true);
  35.  
  36. // use a linear layout manager
  37. mLayoutManager = new LinearLayoutManager(this);
  38. //设置RecycleView的显示方向:(默认为垂直) 水平
  39. mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  40. mRecyclerView.setLayoutManager(mLayoutManager);
  41.  
  42. // specify an adapter (see also next example)
  43. mAdapter = new Adapter(myDataset);
  44. mRecyclerView.setAdapter(mAdapter);
  45. mRecyclerView.setItemAnimator(new MyAnim());
  46. }
  47.  
  48. /**
  49. * @author:Jack Tony
  50. * @tips :写一个viewHolder,用来得到控件。
  51. * @date :2014-11-1
  52. */
  53. public class MyViewHolder extends RecyclerView.ViewHolder implements OnClickListener,OnLongClickListener{
  54.  
  55. private TextView mTextView;
  56. private int mPosition;
  57.  
  58. public MyViewHolder(View rootView) {
  59. super(rootView);
  60. //给父控件绑定监听器
  61. rootView.setOnClickListener(this);
  62. //通过findviewbyId找到item中的控件进行设置
  63. mTextView = (TextView)rootView.findViewById(R.id.textView1);
  64. ImageView imageView = (ImageView)rootView.findViewById(R.id.imageView1);
  65. imageView.setImageResource(R.drawable.kale);
  66. }
  67.  
  68. public void setPosition(int position) {
  69. mPosition = position;
  70. }
  71.  
  72. @Override
  73. public boolean onLongClick(View v) {
  74. // TODO 自动生成的方法存根
  75. return false;
  76. }
  77.  
  78. @Override
  79. public void onClick(View v) {
  80. // TODO 自动生成的方法存根
  81. Toast.makeText(MainActivity.this, "click "+mPosition, 0).show();
  82. }
  83.  
  84. }
  85.  
  86. /**
  87. * @author:Jack Tony
  88. * @tips :这里面完全可以根据viewholder是否为null进行优化
  89. * @date :2014-11-1
  90. */
  91. public class Adapter extends RecyclerView.Adapter<MyViewHolder>{
  92.  
  93. private String[] mDataset;
  94. private MyViewHolder mViewHoder;
  95.  
  96. public Adapter(String[] myDataset) {
  97. mDataset = myDataset;
  98. }
  99.  
  100. @Override
  101. public int getItemCount() {
  102. // TODO 自动生成的方法存根
  103. return mDataset.length;
  104. }
  105.  
  106. @Override
  107. public void onBindViewHolder(MyViewHolder holder, int position) {
  108. mViewHoder.mTextView.setText(mDataset[position]);
  109. mViewHoder.setPosition(position);
  110. }
  111.  
  112. @Override
  113. public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  114. View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
  115. mViewHoder = new MyViewHolder(v);
  116. return mViewHoder;
  117. }
  118.  
  119. }
  120.  
  121. public class MyAnim extends RecyclerView.ItemAnimator{
  122.  
  123. @Override
  124. public boolean animateAdd(ViewHolder arg0) {
  125. // TODO 自动生成的方法存根
  126. return false;
  127. }
  128.  
  129. @Override
  130. public boolean animateChange(ViewHolder arg0, ViewHolder arg1,
  131. int arg2, int arg3, int arg4, int arg5) {
  132. // TODO 自动生成的方法存根
  133. return false;
  134. }
  135.  
  136. @Override
  137. public boolean animateMove(ViewHolder holder, int fromX, int fromY, int toX, int toY) {
  138. // TODO 自动生成的方法存根
  139. return false;
  140. }
  141.  
  142. @Override
  143. public boolean animateRemove(ViewHolder arg0) {
  144. // TODO 自动生成的方法存根
  145. return false;
  146. }
  147.  
  148. @Override
  149. public void endAnimation(ViewHolder arg0) {
  150. // TODO 自动生成的方法存根
  151.  
  152. }
  153.  
  154. @Override
  155. public void endAnimations() {
  156. // TODO 自动生成的方法存根
  157.  
  158. }
  159.  
  160. @Override
  161. public boolean isRunning() {
  162. // TODO 自动生成的方法存根
  163. return false;
  164. }
  165.  
  166. @Override
  167. public void runPendingAnimations() {
  168. // TODO 自动生成的方法存根
  169.  
  170. }
  171.  
  172. }
  173.  
  174. }

源码下载:http://download.csdn.net/detail/shark0017/8110309

参考自:

http://blog.csdn.net/jjwwmlp456/article/details/40540233

http://blog.csdn.net/a396901990/article/details/40187769

http://blog.csdn.net/guxiao1201/article/details/40423361

Android5.0新控件RecyclerVIew的介绍和兼容使用的方法的更多相关文章

  1. Android5.0新控件CardView的介绍和使用

       CardView也是5.0的新控件,这控件其实就是一个卡片啦,当然我们自己也完全可以定义这样一个卡片,从现在的微博等社App中可以看到各式各样的自定义卡片,所以这个控件意义不是很大.suppor ...

  2. 一个Activity掌握Android5.0新控件 (转)

    原文地址:http://blog.csdn.net/lavor_zl/article/details/51279386 谷歌在推出Android5.0的同时推出了一些新控件,Android5.0中最常 ...

  3. Android5.0新控件

    谷歌在推出Android5.0的同时推出了一些新控件,Android5.0中最常用的新控件有下面5种.  1. CardView(卡片视图) CardView顾名思义是卡片视图,它继承FrameLay ...

  4. 一个Activity掌握Android4.0新控件 (转)

    原文地址:http://blog.csdn.net/lavor_zl/article/details/51261380 谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常 ...

  5. Android 5.0新控件——FloatingActionButton(悬浮按钮)

    Android 5.0新控件--FloatingActionButton(悬浮按钮) FloatingActionButton是5.0以后的新控件,一个悬浮按钮,之所以叫做悬浮按钮,主要是因为自带阴影 ...

  6. 【Android】Anroid5.0+新控件---酷炫标题栏的简单学习

    Android5.0+推出的新控件感觉特别酷,最近想模仿大神做个看图App出来,所以先把这些新控件用熟悉了. 新控件的介绍.使用等等网上相应的文章已经特别多了,题主也没那能力去写篇详解出来,本篇随笔记 ...

  7. Android5.0新特性:RecyclerView实现上拉加载更多

    RecyclerView是Android5.0以后推出的新控件,相比于ListView可定制性更大,大有取代ListView之势.下面这篇博客主要来实现RecyclerView的上拉加载更多功能. 基 ...

  8. Android 5.0新控件——TextInputLayout

    Android 5.0(M)新控件--TextInputLayout 介绍之前,先直观的看一下效果 TextInputLayout其实是一个容器,他继承自LinearLayout,该容器是作用于Tex ...

  9. Android4.0新控件

    谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常用的新控件有下面5种.  1. Switch的使用 Switch顾名思义,就是开关的意思,有开和关两种状态. 当Swit ...

随机推荐

  1. .NetCore 结合微服务项目设计总结下实践心得

    以下内容全是在项目中的体验,个人理解心得 起源 2017年7月开始接触.NetCore,当时还是因为Idr4的原因,之前的项目都是用的Idr3做,后面接触到Idr4后,决定以后所有项目都使用.NetC ...

  2. K8s中,tomcat的一部分jvm参数,如何通过env环境变量传递?

    这两天解决的一个需求: 如果用户没有在deployment中设置env参数,则tomcat默认使用1G左右的内存: 如果用户在deployment中提供了jvm参数,则tomcat将这部分的参数,覆盖 ...

  3. 浙江省“一卡通”异地就医,C#调用省一卡通动态库

    前言,最近学习调用 浙江省一卡通业务,主要就是调用一个DLL,动态库文件,这个动态库是浙大网新研发的. 借着自学的机会把心得体会都记录下来,方便感兴趣的小伙伴学习与讨论. 内容均系原创,欢迎大家转载分 ...

  4. for-in循环(for-in Loops)

    for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”. 从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的.因为如果数 ...

  5. Javascript之继承(原型链方式)

    1.原型链 原型链是JavaScript中继承的主要方法. 每个构造函数都拥有一个原型对象,原型对象都包含一个指向构造函数的指针(constructor),实例都包含一个指向原型对象的内部指针(__p ...

  6. JAVAssist字节码操作

    Java动态性的两种常见实现方式 字节码操作 反射 运行时操作字节码可以让我们实现如下功能: 动态生成新的类 动态改变某个类的结构(添加/删除/修改  新的属性/方法) 优势: 比反射开销小,性能高 ...

  7. 2018年湘潭大学程序设计竞赛 F - maze

    把点抽出来 跑个最短路就好啦. #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> # ...

  8. BZOJ.2125.最短路(仙人掌 最短路Dijkstra)

    题目链接 多次询问求仙人掌上两点间的最短路径. 如果是在树上,那么求LCA就可以了. 先做着,看看能不能把它弄成树. 把仙人掌看作一个图(实际上就是),求一遍根节点到每个点的最短路dis[i]. 对于 ...

  9. zoj 3662 第37届ACM/ICPC长春赛区H题(DP)

    题目:给出K个数,使得这K个数的和为N,LCM为M,问有多少种 f[i][j][k]表示选i个数,总和为j,最小公倍数为k memery卡的比较紧,注意不要开太大,按照题目数据开 这种类型的dp也是第 ...

  10. maven执行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误

    原 maven执行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误 在eclipse中对准项目执行maven- ...